1

ボタン(挿入という名前)とデータグリッドビューがあるC#プログラムを作成しました。dvg の新しい行に新しい値を入力すると、挿入ボタンをクリックした後に、入力した値を示すメッセージ ボックスが表示される cmd を入力しました。新しい値を挿入した後、新しい値がSQLデータベースで更新されます。

これが私のコードのスニペットです-

private void button1_Click_1(object sender, EventArgs e)
 {
 //InsertInfo();


 foreach (int rowIndex in lstNewRows)
 {

 MessageBox.Show(dataGridView1.Rows[rowIndex].Cells[0].Value + "; " +
 dataGridView1.Rows[rowIndex].Cells[1].Value);
 }

 lstNewRows.Clear();
 }

 private void dataGridView1_DefaultValuesNeeded_1(object sender, DataGridViewRowEventArgs e)
 {

 lstNewRows.Add(e.Row.Index);

 }
private void updateInfo()
 {

 String strConnection = "Data Source=HP\\SQLEXPRESS;database=MK;Integrated Security=true";


 SqlConnection con = new SqlConnection(strConnection);
 using (SqlConnection sqlConn = new SqlConnection(strConnection))
 {
 using (SqlCommand cmd = new SqlCommand())
 {
 int rowIndex;
 cmd.CommandText = @"UPDATE tble SET " +
 "name = @name, " +
 "number = @number" = (int)dataGridView1.SelectedCells[0].Value + " ";

 cmd.Parameters.Add("@name", SqlDbType.VarChar, 50, "name");
 cmd.Parameters.Add("@number", SqlDbType.VarChar, 50, "number");



 cmd.Connection = sqlConn;



 using (SqlDataAdapter da = new SqlDataAdapter())
 {
 DataTable dtRecord = new DataTable();
 da.UpdateCommand = cmd;
 da.Update(dtRecord);

 }
 }

 }
 }

 private void button2_Click(object sender, EventArgs e)
 {
 updateInfo();
 }
 }

}

4

1 に答える 1

0

行の値の更新に問題があると思います。あなたupdateInfo();は多くの場所で間違っています、これは正しいバージョンです:

String strConnection = "Data Source=HP\\SQLEXPRESS;database=MK;Integrated Security=true";
//SqlConnection con = new SqlConnection(strConnection); not needed
using (SqlConnection sqlConn = new SqlConnection(strConnection))
{
      using (SqlCommand cmd = new SqlCommand())
      {
            int rowIndex = 1; //row index to update?
            var number = Int32.Parse(dataGridView1.Rows[rowIndex].Cells[0].Value.ToString());  //assuming Cells[0] holds number
            var name = dataGridView1.Rows[rowIndex].Cells[1].Value.ToString();                 //as above
            var id = Int32.Parse(dataGridView1.Rows[rowIndex].Cells[3].Value.ToString());      //get id
            //your old command text was completly wrong
            cmd.CommandText = @"UPDATE tble SET  name = @name, number = @number where id =  @id"; //id and @id is key for row to update
            cmd.Parameters.Add("@name", name);
            cmd.Parameters.Add("@number", number);
            cmd.Parameters.Add("@id", id);

            cmd.Connection = sqlConn;
            sqlConn.Open();

            cmd.ExecuteNonQuery();
      }

}

コマンド文字列を機能するものに変更しました。また、元のコードでは、更新する行のIDを取得していなかったため、そのためのマークアップを追加しました。これを正しいもの(変数id)に変更する必要があります。

お役に立てれば :)

于 2013-02-20T09:03:56.447 に答える