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 语句
中
我有以下非常简单的代码:
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 语句