连接已关闭异常
本文关键字:异常 连接 | 更新日期: 2023-09-27 18:28:52
我是C#的新手,正在尝试建立C#数据库连接。但我遇到了一个例外。
ExecuteReader需要一个打开且可用的连接。连接的当前状态为关闭。
以下是代码
public void executeCommand()
{
SqlConnection con = new SqlConnection(connectionString);
try
{
con.Open();
}
catch (Exception ex)
{
}
SqlDataReader rdr = null;
SqlCommand cmd = new SqlCommand("SELECT * FROM Employees", con);
try
{
rdr = cmd.ExecuteReader();
}
catch (Exception)
{
throw;
}
rdr.Close();
// rdr.Close();
}
这是我的连接字符串
public static string connectionString =
"Data Source=(local);Initial Catalog=service;User Id='mayooresan';Password='password';";
感谢您提前抽出时间。
大多数probably连接对象无法打开连接,但在捕获它时,您无法找出错误。需要明确的是:
try
{
con.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString()); //ADD THIS STRING FOR DEBUGGING, TO SEE IF THERE IS AN EXCEPTION.
}
希望这能有所帮助。
打开连接时捕获任何异常。很可能连接没有打开,并且抛出了一个错误。删除连接打开时的try/catch,您可能会看到为什么连接没有打开
当出现异常时,您不会关闭连接和读取器,因此您需要使用try/catch的finally
块或隐含关闭的using-statement
:
using (SqlConnection connection = new SqlConnection(connectionString))
{
using(SqlCommand command = new SqlCommand(queryString, connection)
{
connection.Open();
using(SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
// do something with it
}
}
}
}
除此之外,您不应该使用空的catch块。如果无法打开连接,则无法使用该连接。然后你应该记录并抛出异常,但不要表现得好像什么都没发生一样。
尝试将所有内容包装在一个Try-catch块中。按照目前的情况,如果在尝试打开连接时抛出异常,它将以静默方式失败。试试这个代码:
try
{
SqlConnection con = new SqlConnection(connectionString);
SqlDataReader rdr = null;
SqlCommand cmd = new SqlCommand("SELECT * FROM Employees", con);
rdr = cmd.ExecuteReader();
}
catch(Exception)
{
throw;
}
您正在调试代码吗?如果没有,你将无法看到异常,因为你的捕获上没有任何东西
此外,我建议在您的场景中使用这种方法:
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(queryString, connection);
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(String.Format("{0}", reader[0]));
}
}