C#和Oracle,登录表单:由于对象当前的状态无效,操作无法执行

3
  private void bLogIn(object sender, EventArgs e)
    {

        string logging = "select * from CLIENT where LOGIN='" + this.t_Login.Text + "' and PASSWORD='" + this.t_Password.Text + "' ;";

        OracleConnection conn = new OracleConnection("Data Source=XXX/orcl;User Id=XXX;Password=XXX;");
        OracleCommand cmd = new OracleCommand();

        cmd.CommandText = logging;
        cmd.Connection = conn;
        try
        {
            conn.Open();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }



        int count = 0;

        OracleDataReader reader = cmd.ExecuteReader();  // At this line there is the error: Operation is not valid due to the current state of the object

        while (reader.Read())
        {
           count = count + 1;
        }
        if (count == 1)
        {
        MessageBox.Show("Welcome");
        }
        else
        {
            MessageBox.Show("Wrong Password");
        }
        conn.Dispose();
    }

这是在MySQL上运行正常的代码,但转换到Oracle后就不起作用了。我做错了什么?有什么区别。应该像在MySQL中一样容易,对吧?

为什么“OracleDataReader reader = cmd.ExecuteReader();”会导致错误:“由于对象的当前状态无效,操作无效”?

1个回答

8
您没有将连接分配给cmd。请尝试下面的代码:

您需要将连接分配给cmd,可参考以下代码:

OracleCommand cmd = new OracleCommand();
cmd.connection = conn;
cmd.CommandText = logging;
int count = 0;
OracleDataReader reader = cmd.ExecuteReader();

我正在从我的波兰版本中重写这段代码;D 但是我在某个地方把它弄丢了,但是在我的原始代码中它仍然存在,所以那不是出错的原因。http://pasteboard.co/x9cxGjX.png - evilferber
有两个错误。一个是我在Oracle查询的末尾加了一个“;”符号,然后,在简化我的代码以将其粘贴到这里(清除波兰注释)之后,再次运行应用程序时,我因为错误地删除了“cmd.connection = conn;”而重写了第二个错误。所以就是这样;) - evilferber
@evilferber - 有一个网站-错误翻译器,你可以在将来使用:finderr.net。在这种情况下,它显示类似于示例的描述:“由于对象的当前状态,操作无效。” - Ponder Stibbons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接