C# SQL 关闭阅读器

时间:2021-03-23 16:04:57

标签: c# sql .net database

我正在编写一个程序,将表单中的信息添加到我的数据库中,但是,在运行该程序时,我遇到了以下语法错误:

<块引用>

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");
        }
    }

0 个答案:

没有答案
相关问题