1

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

    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()调用失败,所以我知道连接字符串是正确的,至少就数据源、用户 ID 和密码而言。

然而,当它接到cmd.ExecuteReader()电话时,我收到一条InvalidOperationException消息,Invalid operation. The connection is closed.

我用 C# 做了很多 SQL Server 的东西,但这是我第一次使用 OracleClient。除了它已被弃用之外,看不到任何明显错误的东西,但我认为它仍然会起作用。我不是想写任何生产代码,我只是想做一个小的一次性测试。

4

2 回答 2

3

您尚未将连接对象与命令相关联。

cmd.Connection = conn;

或将其传递给 Command 构造函数,例如:

using (OracleCommand cmd = new OracleCommand("SELECT * from CONTRACT", conn))
于 2015-03-25T16:29:36.620 回答
1

您尚未将 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实例添加到命令的构造函数中即可。
顺便说一句,读者也应该包含在 using 语句中

于 2015-03-25T16:30:11.973 回答