下面是一段更新pg_fs表内分值的语句,曾经找了十几个人同时更新没有问题,当把程序安装到客户的服务器上的时候,找了100人同时更新分数的时候,开始还能更新,但是一会儿之后发现所有人的数据都更新不了了,但是不返回错误值,不知道为什么?谁能帮我看看是怎么回事啊?数据库用的是oracle10g。不同的人是update同一个表中的不同记录。
         OracleConnection con=DB.createConnection ();
con.Open ();
if(k>15)
{
k = 15;
}
string sql = "update pg_fs set yjjy ='" + yjjy + "',pgrq = to_date(substr('" + DateTime.Now.Date.ToString("yyyyMMdd HH:mm:ss") + "',1,17),'yyyy-mm-dd hh24:mi:ss')";
for(int i = 1;i <= k;i++)
{
sql +=",score" + i.ToString() + " = '" + score[i-1] + "'";
}
sql += " where bpgr = '" + bpgr + "' and pgr = '" + pgr + "' and lx = '" + lx + "' and term = '" + term + "' and lesson = '" + lesson + "'";

OracleTransaction tx;
tx = con.BeginTransaction();
OracleCommand cmd=new OracleCommand (sql,con,tx);
try
{
cmd.ExecuteNonQuery ();
tx.Commit();
}
catch(Exception err)
{
tx.Rollback();
                  return err.Message;
}
finally
{
con.Close();
tx.Dispose();
con.Dispose();
cmd.Dispose();
}
return "ok";

解决方案 »

  1.   

    1。
    但是不返回错误值,不知道为什么?
    =========
    死了?
    既然选择异常模型,就应该直接 throw 出来2。
    con.Dispose();
    cmd.Dispose();
    ==========
    一般情况下,没必要手动 Disponse,这里即不需要。
      

  2.   

    其它错误都可以返回err.Massage。
    程序没有死,程序照常运行,速度还挺快也没有卡,直接return 'ok',跳转到保存成功的页面,就是数据库里的数据没有更新。
    以前也没有手动dispose,也还是不行。
      

  3.   

    1。
    打断点,调试跟踪2。
    检查影响值:int affectedRecords = cmd.ExecuteNonQuery ();
    if(affectedRecords <= 0) {
       throw new Exception("没有行受影响。");
    }
      

  4.   

    在我们自己的服务器上怎么调试都没问题,不过我们最多只能找到20个人测试,都没有问题。客户却要100人以上一块使用,就不行了。是不是,oracle锁表有问题啊?oracle有什么特殊的设置么?
      

  5.   

    楼主没有什么开发经验呀:
    1:没有防止sql注入
    2:不知道你上面这段代码的运行环境是什么样的,是不是多线程运行的,那属性"K"是在哪儿定义的,不知道会不会造成线程脏读.我想如果没有报错再加上你说得"20","100",最大的问题可能是线程问题
      

  6.   

    这是我接手别人的项目,k是传进来的值,可以不用管它的,而且是企业内部网的程序,环境是windows 2003 server,数据库用的是oracle10g,.net framework1.1
    我没有刻意的用多线程,是不是有什么特殊的设置?登陆查询什么的都没问题,就是更新的时候人多的话就不行了。
      

  7.   

    我想,首先必须在服务端监控一下SESSIONS,看看是否有什么异常,有的SESSION还会显示相关的的SQL.
    如果SESSION没有提示相关被阻塞情况,则可以考虑是否你的程序写的有问题,是否有可能为.NET的原因导致的。
      比较妥当的做法就是设置表格或者文件自动记录执行的SQL以及相关信息,从而判断是什么导致的。