oracle version: 10.2.0.2
vs.net 2005搜了好多地方,和这位兄弟的问题一样:http://topic.csdn.net/u/20070824/14/6759b9ff-068a-4185-9c45-0231b9dd7e23.html
对数据库的操作时,insert没有问题,但CommandText换成update语句是,执行到ExecuteNonQuery()没有响应,也没有异常抛出,就是到那一句的时候后台console就不动了。实在搞不明白哪个地方的问题,请各位高手看看什么问题,多谢多谢!CommandText里面的查询语句我copy到pl/sql里面去执行都是没有问题的
代码如下:
conn.Open();
                OracleCommand cmd = conn.CreateCommand();
                OracleTransaction transaction;
                transaction = conn.BeginTransaction(IsolationLevel.ReadCommitted);
                cmd.Transaction = transaction; cmd.CommandText = "UPDATE BMCREPO.BEM_EVENTS SET STATUS = :status WHERE MC_HOST_ADDRESS = :address";
                cmd.CommandType = CommandType.Text;
OracleParameter[] parameterValue = { 
 new OracleParameter("address",OracleType.VarChar,20),
 new OracleParameter("status",OracleType.VarChar,20),
 }; parameterValue[0].Value = "abc";
parameterValue[1].Value = "OK"; foreach (OracleParameter parameter in parameterValue) cmd.Parameters.Add(parameter);                int num = cmd.ExecuteNonQuery(); //update和delete执行到这就不动了                   transaction.Commit();                cmd.Dispose();

解决方案 »

  1.   

    急啊,我就不明白,为什么都是sql语句,insert可以update就不可以呢
      

  2.   

    OracleParameter[] parameterValue = { 
    new OracleParameter(":address",OracleType.VarChar,20), 
    new OracleParameter(":status",OracleType.VarChar,20), 
    }; 
    注意红色部分,把冒号补上。
      

  3.   

    谢谢GhostAdai ,我试试不过.net要求定义这个的时候不要 加冒号的
      

  4.   

    呃,GhostAdai ,你就是神!
    如你所言,问题解决,谢了谢了能告诉我为什么在insert的时候不需要加冒号,而update要呢?
      

  5.   

    这个我也不清楚,“但是,在存储过程或在代码的其他地方引用命名的参数时(例如,将 OracleParameter 对象添加到 Parameters 属性时),请不要在命名的参数前加上冒号 (:)。数据提供程序会自动提供冒号。”这一句我也注意到了,不过不加的话确实会出问题,也许是个Bug吧,有待验证。
      

  6.   

    “将 OracleParameter 对象添加到 Parameters 属性时”
    我想也有可能是我们对这句话的理解有偏差,在代码:
    OracleParameter[] parameterValue = { 
    new OracleParameter(":address",OracleType.VarChar,20), 
    new OracleParameter(":status",OracleType.VarChar,20), 
    }
    的时候,仅仅是创建了一个OracleParameter的参数集合,而并未添加到Parameters属性,所以这里应该还是要加冒号的。
      

  7.   

    OracleParameter[] parameterValue = { 
    new OracleParameter(":address",OracleType.VarChar,20), 
    new OracleParameter(":status",OracleType.VarChar,20), 

    在它下面一句就是赋值操作了,也没有别的地方引用参数了,再者insert的时候也没有问题感觉可能是个bug谢谢啊,昨天为这个问题搞了一下午,呵呵
      

  8.   

    我这里没有Oracle,没办法测试,如果你还在关注这个问题的话可以像MSDN的那个例子那样测试一下这种形式的:
    adapter.SelectCommand.Parameters.Add("pEName", OracleType.VarChar, 80).Value = "Smith";
    也就是在创建参数对象的同时赋值同时加到Parameters集合里去,如果这样不加冒号没问题的话那就是像我8楼说的那样了——先创建,再添加的话是要冒号的,而创建的同时添加是不要冒号的。我们对“将 OracleParameter 对象添加到 Parameters 属性时,请不要在命名的参数前加上冒号 (:)。”这一句理解有偏差了。“insert的时候也没有问题”,可以把这一段有关参数创建——赋值——添加到Parameters 的代码贴出来看看比较一下吗?PS:刚刚注意到你用了个循环添加参数集合,没记错的话有个AddRange方法可以直接添加集合变量的,试试,呵呵。
      

  9.   

    谢谢ls的,我试了赋值同时加到Parameters集合中去,不加冒号是没有问题的,还是我对那句话的理解有偏差,呵呵...
    再次谢谢你的建议!