我是C#的新手并尝试建立C#db连接。但我得到了一个例外。
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';";
感谢您的提前时间。
答案 0 :(得分:3)
打开连接时,您将捕获任何异常。很可能连接没有打开并且引发错误。删除连接开口处的try / catch,您可能会看到连接未打开的原因
答案 1 :(得分:3)
大多数概率连接对象无法打开连接,但是当您捕获它时,您无法找出错误。要明确:
try
{
con.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString()); //ADD THIS STRING FOR DEBUGGING, TO SEE IF THERE IS AN EXCEPTION.
}
希望这有帮助。
答案 2 :(得分:2)
当引发异常时,你不会关闭连接和阅读器,因此你需要使用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块。如果无法打开连接,则无法使用。然后你应该记录并抛出异常,但不要表现得好像什么也没发生过。
答案 3 :(得分:1)
尝试将所有内容包装在一个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;
}
答案 4 :(得分:1)
此外,我建议在您的方案中使用此方法:
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]));
}
}