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();

もちろん、パラメーターの学生 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メソッドを使用して、パラメーターとその値をコマンド オブジェクトに追加しました。このメソッドは、1 行のコードですべてを実行できるため便利ですが、AddWithValue は、渡された値のデータ型を見て、パラメーターのデータ型を決定することに注意してください。データベース フィールドとパラメーターが一致しない場合は、エラーまたは不正な変換を取得します。また、AddWithValue は、パラメーターとそのデータ型の明示的な宣言よりもパフォーマンスが低くなります。パラメータの受け渡しをより深く理解するには、この非常に詳細な記事を参照してください。

于 2013-09-08T14:19:21.807 に答える