如何通过texbox和datagridview更新主键

时间:2015-11-21 19:48:59

标签: c# winforms datagridview

我正在使用带有C#的Windows窗体,我有一个gridview和4个texboxes和更新按钮,我想通过texbox更新所选行,我可以更改名称,大小,日期但我无法更改Id,我希望能够更改所有列。我怎么能这样做!!

 private void Updatebtn_Click_1(object sender, EventArgs e)
       {

               SqlConnection conn = new SqlConnection(@"Data Source=Ali-pc\sqlexpress;Initial Catalog=DB;Integrated Security=True");
               SqlCommand cmd = new SqlCommand("update stock set Id=@Id, Name= @Name,  Size= @Size, Date=@Date where Id=@Id ", conn);
               conn.Open();
               cmd.Parameters.AddWithValue("@Id", textBox1.Text);
               cmd.Parameters.AddWithValue("@Name", textBox2.Text);
               cmd.Parameters.AddWithValue("@Size", textBox3.Text);
               cmd.Parameters.AddWithValue("@Date", dateTimePicker1.Value);
               cmd.ExecuteNonQuery();
               MessageBox.Show("Successfully Changed ", "message", MessageBoxButtons.OK, MessageBoxIcon.Information);
               DataTable ds = new DataTable();
               SqlDataAdapter sda = new SqlDataAdapter("Select * from stock", conn);
               sda.Fill(ds);
               BindingSource bs = new BindingSource();
               bs.DataSource = ds;
               dataGridView1.DataSource = bs;

           }

2 个答案:

答案 0 :(得分:2)

仔细看看你的命令。

update ... set Id=@Id ... where Id=@Id

您尝试将您的Id列设置为所具有的值。等;

update ... set Id=5 ... where Id=5

这就是为什么您的列值不会发生变化的原因。考虑更改您想要更改的值WHERE部分。

还有一些事情;

答案 1 :(得分:1)

虽然更新主键并不是一个好主意,但在您需要的情况下,它就足够了:

  • 使用2个不同的参数,例如@OriginalId用于原始值,@NewId用于更改值
  • 然后将原始值分配给@OriginalId,将新值分配给@NewId

"UPDATE stock SET Id=@NewId, Name= @Name,  Size= @Size, Date=@Date WHERE Id=@OriginalId "