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();
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();
new OracleParameter(":address",OracleType.VarChar,20),
new OracleParameter(":status",OracleType.VarChar,20),
};
注意红色部分,把冒号补上。
如你所言,问题解决,谢了谢了能告诉我为什么在insert的时候不需要加冒号,而update要呢?
我想也有可能是我们对这句话的理解有偏差,在代码:
OracleParameter[] parameterValue = {
new OracleParameter(":address",OracleType.VarChar,20),
new OracleParameter(":status",OracleType.VarChar,20),
}
的时候,仅仅是创建了一个OracleParameter的参数集合,而并未添加到Parameters属性,所以这里应该还是要加冒号的。
new OracleParameter(":address",OracleType.VarChar,20),
new OracleParameter(":status",OracleType.VarChar,20),
}
在它下面一句就是赋值操作了,也没有别的地方引用参数了,再者insert的时候也没有问题感觉可能是个bug谢谢啊,昨天为这个问题搞了一下午,呵呵
adapter.SelectCommand.Parameters.Add("pEName", OracleType.VarChar, 80).Value = "Smith";
也就是在创建参数对象的同时赋值同时加到Parameters集合里去,如果这样不加冒号没问题的话那就是像我8楼说的那样了——先创建,再添加的话是要冒号的,而创建的同时添加是不要冒号的。我们对“将 OracleParameter 对象添加到 Parameters 属性时,请不要在命名的参数前加上冒号 (:)。”这一句理解有偏差了。“insert的时候也没有问题”,可以把这一段有关参数创建——赋值——添加到Parameters 的代码贴出来看看比较一下吗?PS:刚刚注意到你用了个循环添加参数集合,没记错的话有个AddRange方法可以直接添加集合变量的,试试,呵呵。
再次谢谢你的建议!