OracleClient 说我的连接已关闭

OracleClient says my connection is closed

我有以下非常简单的代码:

    static void Main(string[] args)
    {
        using (OracleConnection conn = new OracleConnection("Data Source=tnsname;User Id=zzzz;Password=xxxx"))
        {
            using (OracleCommand cmd = new OracleCommand("SELECT * from CONTRACT"))
            {
                conn.Open();
                IDataReader reader = cmd.ExecuteReader();
            }
        }
    }
}

显然我已经更改了连接字符串,但是如果连接字符串错误,conn.Open() 调用将失败,所以我知道连接字符串是正确的,至少就数据源而言,User ID 和密码。

但是,当它到达 cmd.ExecuteReader() 调用时,我收到 InvalidOperationException 消息 Invalid operation. The connection is closed.

我已经用 C# 完成了很多 SQL 服务器方面的工作,但这是我第一次使用 OracleClient。看不出有什么明显的错误,除了它已被弃用之外,但我认为它仍然可以运行。我不是要编写任何生产代码,我只是想做一点一次性测试。

您还没有将您的连接对象与命令相关联。

cmd.Connection = conn;

或在命令构造函数中传递它,如:

using (OracleCommand cmd = new OracleCommand("SELECT * from CONTRACT", conn))

您尚未将 Connection 实例分配给 OracleCommand 实例

static void Main(string[] args)
{
    using (OracleConnection conn = new OracleConnection("Data Source=tnsname;User Id=zzzz;Password=xxxx"))
    {
        using (OracleCommand cmd = new OracleCommand("SELECT * from CONTRACT", conn))
        {
            conn.Open();
            using(IDataReader reader = cmd.ExecuteReader())
            {
                .....
            }
        }
    }
}

只需将 conn 实例添加到命令的构造函数中即可。
顺便说一下, reader 也应该包含在 using 语句