我有以下非常简单的代码:
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。除了它被弃用的事实之外,看不到任何明显错误的东西,但我认为它仍然会起作用。我没有尝试编写任何生产代码,我只想尝试进行一次性的一次性测试。
答案 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
实例添加到命令的构造函数中即可
顺便说一句,读者也应该包含在使用声明中