我正在编写一个程序,将表单中的信息添加到我的数据库中,但是,在运行该程序时,我遇到了以下语法错误:
<块引用>System.InvalidOperationException: '阅读器关闭时调用 Read 的尝试无效。'
如果我不关闭阅读器,语句 sqlCmd.ExecuteNonQuery();
将不会运行,因为已经有一个与此命令关联的打开的 DataReader。
这是来源:
string isbnQuery = "SELECT * FROM book WHERE isbn = '" + txtbox_id.Text + "'";
SqlConnection sqlCon = new SqlConnection(connectionString);
SqlCommand sqlCmdQuery = new SqlCommand(isbnQuery, sqlCon);
SqlDataAdapter sda = new SqlDataAdapter(isbnQuery, sqlCon);
DataTable dtbl = new DataTable();
sda.Fill(dtbl);
if (dtbl.Rows.Count == 1)
{
try
{
using (sqlCon)
{
sqlCon.Open();
SqlDataReader reader = sqlCmdQuery.ExecuteReader();
while (reader.Read())
{
DialogResult dr = MessageBox.Show("Is this Correct?", reader["title"].ToString(), MessageBoxButtons.YesNo);
if (dr == DialogResult.Yes)
{
SqlCommand sqlCmd = new SqlCommand("book_log", sqlCon);
sqlCmd.CommandType = CommandType.StoredProcedure;
// adding text-field data to the database
char current = 'N';
sqlCmd.Parameters.AddWithValue("@book_id", reader["book_id"]);
sqlCmd.Parameters.AddWithValue("@id", ID.getID);
sqlCmd.Parameters.AddWithValue("@date_from", dtp_from.Value.ToString());
sqlCmd.Parameters.AddWithValue("@date_to", dtp_hand.Value.ToString());
sqlCmd.Parameters.AddWithValue("@fine", current);
sqlCmd.Parameters.AddWithValue("@handed", current);
sqlCmd.ExecuteNonQuery();
MessageBox.Show("Done!");
}
else if (dr == DialogResult.No)
{
return;
}
}
}
}
catch (SqlException ex)
{
MessageBox.Show("Contact a Staff Member " + ex.Message);
}
finally
{
sqlCon.Close();
}
}
else
{
Console.WriteLine("Book Not Found");
}
}