OracleClient说我的连接已关闭

时间:2015-03-25 16:28:31

标签: c# .net system.data.oracleclient

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

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

但是,当进入cmd.ExecuteReader()来电时,我会收到InvalidOperationException的消息,Invalid operation. The connection is closed.

我已经从C#中完成了很多SQL Server的工作,但这是我第一次使用OracleClient。除了它被弃用的事实之外,看不到任何明显错误的东西,但我认为它仍然会起作用。我没有尝试编写任何生产代码,我只想尝试进行一次性的一次性测试。

2 个答案:

答案 0 :(得分:3)

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

cmd.Connection = conn;

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

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

答案 1 :(得分: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实例添加到命令的构造函数中即可 顺便说一句,读者也应该包含在使用声明中