我创建了这个方法来检查表中这条记录的编号
但是当count(*)的值为0时,它会给我这个错误消息
我用这个库来连接oracle db
但是当count(*)的值为0时,它会给我这个错误消息
我用这个库来连接oracle db
使用Oracle.DataAccess.Client;
- private int checkPort(int portID)
- {
- int intCount = 0;
- try
- {
- OracleCommand oraCommand = new OracleCommand();
- oraCommand.Connection = new DBManager().getConnection();
- oraCommand.CommandText = "select count(*) as num from wireless_port_oid where port_id=:port_id";
- oraCommand.Parameters.Add(":port_id",portID);
- OracleDataReader Reader= oraCommand.ExecuteReader();
- return intCount;
- while (**Reader.Read()**)//it gives exception here
- //The err Operation is not valid due to the current state of the object.
- {
- intCount =Convert.ToInt32(Reader[0]);
- Reader.Close();
- oraCommand.Connection.Close();
- oraCommand = null;
- if (intCount > 0)
- {
- return 1;
- }
- }
- Reader.Close();
- Reader.Dispose();
- oraCommand.Connection.Close();
- oraCommand.Connection.Dispose();
- oraCommand.Dispose();
- return 0;
- }
- catch (OracleException exception)
- {
- Console.WriteLine(exception.Message);
- return 0;
- }
- }
解决方法
您在Count = 0时关闭读取器,然后尝试在while循环中再次读取它.
- while (Reader.Read())//it gives exception here
- //The err Operation is not valid due to the current state of the object.
- {
- intCount =Convert.ToInt32(Reader[0]);
- Reader.Close();
- oraCommand.Connection.Close();
- oraCommand = null;
- if (intCount > 0)
- {
- return 1;
- }
- // if intCOunt == 0 then what? loop again
- }
但是你的代码无效 – 我只是注意到你有一个返回intCount;就在您说的行之前有错误.我认为这只是一个错误的例子.
我会重构你的代码以利用C#的using语句:
- private int checkPort(int portID) {
- string sql = "select count(*) as num from wireless_port_oid where port_id=:port_id";
- int intCount = 0;
- try {
- using(OracleCommand oraCommand = new OracleCommand()) {
- using(oraCommand.Connection = new DBManager().getConnection()) {
- oraCommand.CommandText = sql;
- oraCommand.Parameters.Add(":port_id",portID);
- intCount = oraCommand.ExecuteScalar();
- }
- }
- }
- catch (OracleException exception) {
- Console.WriteLine(exception.Message);
- // may be you shouldn't return 0 here possibly throw;
- }
- return intCount;
- }