0

我有一个命令可以计算过期书籍,但我只希望它在特定的人身上。我的命令是在表 Borrowbook 中插入罚款。我还将代码放在 datagridview 将显示数据的按钮中。我的代码是这样的:

SqlConnection con = new SqlConnection(constring);
        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT  [Student ID], ISBN, Title, Date, [Due Date], Penalty FROM    Borrowbook;", con);


        try
        {
            SqlDataAdapter sda = new SqlDataAdapter();
            sda.SelectCommand = cmd;
            DataTable Records = new DataTable();
            sda.Fill(Records);
            BindingSource bsource = new BindingSource();

            bsource.DataSource = Records;
            dataGridView1.DataSource = bsource;
            sda.Update(Records);


        }
        catch (Exception ex)
        {

            MessageBox.Show(ex.Message);
        }
        if (dateTimePicker2.Value < DateTime.Now)
        {
            cmd.CommandText = "INSERT INTO Borrowbook (Penalty) VALUES  (@Penalty)";
            SqlParameter p1 = new SqlParameter("@Penalty", SqlDbType.Int);
            p1.Value = 50;
            cmd.Parameters.Add(p1);
            cmd.ExecuteNonQuery();
4

1 回答 1

0

您使用罚款更新借阅记录(表中已存在)的命令应包括学生 ID 和逾期归还书籍的 ISBN

  cmd.CommandText = "UPDATE Borrowbook SET Penalty = @Penalty " + 
                    "WHERE [Student ID] = @stuid AND ISBN = @isbn";
  cmd.Parameters.AddWithValue("@Penalty", 50);
  cmd.Parameters.AddWithValue("@stuid", GetStudentID());
  cmd.Parameters.AddWithValue("@isbn", GetISBN());
  cmd.ExecuteNonQuery();

当然,您需要从网格中提取参数 Student ID 和 ISBN 的值(我想从当前选定的行中提取)

例如

 public int GetStudentID()
 {
     // The Student ID is the first cell of the current row
     int Row = dataGridView1.CurrentRow.Index;
     return Convert.ToInt32(dataGridView1[0,Row].Value);
 }

 public string GetISBN()
 {
     // The ISBN is the second cell of the current row
     int Row = dataGridView1.CurrentRow.Index;
     return dataGridView1[1,Row].Value.ToString();
 }

在上面的示例中,我使用AddWithValue方法将参数及其值添加到命令对象。这种方法很方便,因为您可以用一行代码完成所有操作,但请注意 AddWithValue 通过查看传入值的数据类型来决定参数的数据类型。如果您的数据库字段和您的参数不匹配,您可以得到错误或不正确的转换。此外,AddWithValue 的性能不如参数及其数据类型的显式声明。查看这篇非常详细的文章,以更深入地了解参数传递

于 2013-09-08T14:19:21.807 回答