C# SQL 更新语句不更新
Posted
技术标签:
【中文标题】C# SQL 更新语句不更新【英文标题】:C# SQL Update Statement Doesn't Update 【发布时间】:2016-02-26 15:21:33 【问题描述】:我有一些用 C# 编写的代码,用于更新表。虽然代码运行时不会引发错误,但表格不会更新。
如果我使用 SQL 命令并在 SSMS 查询窗口中运行,它确实可以工作。
代码如下:
try
string connectionString = "Server=XXXX;Database=XXX;Integrated Security=True";
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand command = connection.CreateCommand())
command.CommandText = "update address set central_phone_number = '" + NewPhoneNumber + "'" + " where id = " + ID;
connection.Open();
int result = command.ExecuteNonQuery();
connection.Close();
catch (SqlException ex)
MessageBox.Show(ex.Message, "SQL Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
id 是表的主键,因此只有特定的行会被更新。
【问题讨论】:
您的查询在执行前是什么样子的?您的列的类型是什么?顺便说一句,您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。 在调用ExecuteNonQuery之前需要在命令中添加连接:command.Connection = connection;没关系 - 我看到你从链接它们的连接中创建了命令。 @JᴀʏMᴇᴇ 您是如何更改显示名称字体的? 在command.CommandText后下断点,用调试器获取字符串的值,手动运行查询。我敢打赌它也不会按预期运行。 @JᴀʏMᴇᴇ 我复制了你粘贴的我名字的版本,它有效:D 【参考方案1】:显然,由于您将 id 与查询字符串连接起来,因此 id 是程序中的字符串。 但是,您的数据库中的 id 数据类型是 int。您将通过使用参数简单地解决您的问题(以及注入等其他问题):
using (SqlCommand command = connection.CreateCommand())
command.CommandText = "update address set central_phone_number =@num where id = @ID";
command.Parameters.AddWithValue("@num", NewPhoneNumber);
command.Parameters.AddWithValue("@ID",ID);
....
【讨论】:
这里要小心。在使用像这样的传递查询时,使用 AddWithValue 可能会误解数据类型。最好在此处指定数据类型。 blogs.msmvps.com/jcoehoorn/blog/2014/05/12/… 不管我 +1。since you concatenate id with your query string, id is a string in your program
不正确。无需显式调用 ToString
就可以连接 int
以上是关于C# SQL 更新语句不更新的主要内容,如果未能解决你的问题,请参考以下文章
sql在update更新时如何快速且大批量的更新数据(C#中写的)
C#能不能像操作SQL数据库那样使用sql语句对excel进行读取更新等操作?