加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

由于对象的当前状态,操作无效.在C#中

发布时间:2020-12-15 07:54:19 所属栏目:百科 来源:网络整理
导读:我创建了这个方法来检查表中这条记录的编号 但是当count(*)的值为0时,它会给我这个错误消息 我用这个库来连接oracle db 使用Oracle.DataAccess.Client; private int checkPort(int portID) { int intCount = 0; try { OracleCommand oraCommand = new Oracle
我创建了这个方法来检查表中这条记录的编号
但是当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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读