关闭读取器时调用读取的尝试无效
本文关键字:读取 无效 调用 | 更新日期: 2023-09-27 18:32:37
我在使用sql数据阅读器时遇到了问题。每当我尝试读取数据时,它都会给我一个错误,指出在阅读器关闭时调用 Read 的尝试无效。请帮我找出问题所在
private void button1_Click(object sender, EventArgs e)
{
string name = this.textBox1.Text;
string connstring = @"Data Source=(LocalDB)'v11.0;AttachDbFilename=C:'Users'Gardezi'Documents'Visual Studio 2012'Projects'homeWork2'homeWork2'Database1.mdf;Integrated Security=True";
SqlConnection con = new SqlConnection(connstring);
string query = "Select * from diaryDB";
SqlCommand com = new SqlCommand(query, con);
SqlParameter p = new SqlParameter("name", name);
con.Open();
SqlDataReader d = com.ExecuteReader();
con.Close();
deleteResult r = new deleteResult(d);
r.Show();
}
这是删除结果的构造函数
public deleteResult(SqlDataReader d)
{
InitializeComponent();
while (d.Read())
{
this.comboBox1.Items.Add((d["Title"] +"-" +d["Description"]).ToString());
}
}
关闭连接后无法读取。只需更改代码的这一部分:
从
(...)
con.Close();
deleteResult r = new deleteResult(d);
(...)
自
(...)
deleteResult r = new deleteResult(d);
con.Close();
(...)
请尝试使用 using 语句,将连接、命令和读取器正确括在适当的块中。
private void button1_Click(object sender, EventArgs e)
{
string name = this.textBox1.Text;
string connstring = @"....";
string query = "Select * from diaryDB";
using(SqlConnection con = new SqlConnection(connstring))
using(SqlCommand com = new SqlCommand(query, con))
{
SqlParameter p = new SqlParameter("name", name);
con.Open();
using(SqlDataReader d = com.ExecuteReader())
{
deleteResult r = new deleteResult(d);
r.Show();
}
}
}
这样,当您从阅读器读取时,连接将保持打开状态。这对于避免错误至关重要。
更重要的一点是,您不必担心在不再需要连接时关闭和处置连接。从使用块的退出也会关闭并释放连接、命令和读取器,以防出现异常。