我在 C# 中使用 Windows 窗体,我有一个 gridview 和 4 个文本框和更新按钮,我想通过文本框更新选定的行,我可以更改名称、大小、日期,但我不能更改 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;
}
最佳答案
仔细看你的命令。
update ... set Id=@Id ... where Id=@Id
您尝试将您的 Id 列设置为已经的值。喜欢;
update ... set Id=5 ... where Id=5
这就是您的列值不会更改的原因。考虑更改您的 WHERE
部分,您想要准确更改其值。
还有一些事情;
- 使用
using
statement自动处理您的连接、命令和适配器。 - 不要使用 AddWithValue 方法。 It may generate unexpected and surprising results sometimes .使用
Add
方法重载来指定您的参数类型及其大小。 DATE
可能是 reserved keyword在 TSQL 中。您可能想将其用作[DATE]
。或者更好,将其更改为非 future 保留字。
关于c# - 如何通过textbox和datagridview更新主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33847854/