我使用以下代码将项目添加到表中,但我在删除或更新表中的项目时遇到麻烦。我正在尝试像
这样的命令delete from MyTable
values('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "',)";
,命令被接受,但项目不被删除。
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "insert into MyTable values('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "',)";
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("Item inserted");
这是一个有点难找到资源,因为谷歌只是显示,sql或mysql当我试图搜索一个解决方案。
为什么期望基于INSERT
关键字的SQL命令删除记录?
using var con = new SqlConnection(" ... ");
using var cmd = con.CreateCommand();
cmd.CommandText = @"
DELETE
FROM MyTable
WHERE MyColumn= @SomeValue";
cmd.Parameters.Add("@SomeValue", SqlDbType.Int).Value = textBox1.Text;
con.Open();
cmd.ExecuteNonQuery();
// No need to call con.Close();. The using directive takes care of it.
特别注意我是如何使用查询参数的。问题中的字符串连接技术是NEVER好吧,这是我所见过的最简单的方法来发现一年后你六个月前被黑了。
要更改(更新)一条记录,您必须编写一个UPDATE
查询:
using var con = new SqlConnection(" ... ");
using var cmd = con.CreateCommand();
cmd.CommandText = @"
UPDATE MyTable
Set SomeColumn = @SomeValue
WHERE SomeOtherColumn = @SomeOtherValue";
cmd.Parameters.Add("@SomeValue", SqlDbType.Int).Value = textBox2.Text;
cmd.Parameters.Add("@SomeOtherValue", SqlDbType.Int).Value = textBox1.Text;
con.Open();
cmd.ExecuteNonQuery();
// No need to call con.Close();. The using directive takes care of it.
要理解的是,您不需要通过指定VALUES()
子句中的所有字段来删除或更新记录,就像您使用INSERT
一样。相反,您可以使用WHERE
子句,并且只需要包含足够的条件表达式来标识您想要更改或删除的行。UPDATE
语句将通过SET
子句进一步指定要更改的内容。