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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11490855/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-09 18:02:41  来源:igfitidea点击:

Operation is not valid due to the current state of the object. in C#

c#oracle

提问by danarj

I had created this method to check number of this record in the table but it gives me this error message when the value of count(*) is 0 i use this library to connect oracle db

我创建了这个方法来检查表中这条记录的数量,但是当 count(*) 的值为 0 时它给了我这个错误消息我使用这个库连接 oracle db

using Oracle.DataAccess.Client;

使用 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;
            }
        }

采纳答案by Preet Sangha

You're closing the reader on Count = 0 and then trying to read it again in the while loop.

您在 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
                }

But your code is not valid - I just noticed that you have a return intCount; just before the line you says has an error.I assume that that's just example typo.

但是你的代码无效——我只是注意到你有一个 return intCount; 就在你说的那一行之前有一个错误。我认为这只是示例错字。

I would refactor your code to take adavantage of C#'s using statement:

我会重构您的代码以利用 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;
}