0

我想创建一个 SQL 语句,该语句将从文本框中获取的值插入到该列中的任何值为 NULL 的列中

我正在用 C# 做,我想知道是否有人可以帮助我......我写了一个伪代码版本的命令:

string newPhoneNumber = textBox.Text;
SqlCommand cmd = new SqlCommand(
"INSERT INTO table ([Tag ID]) 
 VALUES ('" + newPhoneNumber + "')"; 
 WHERE columnName = NULL" 
cmd.ExecuteNonQuery();
4

6 回答 6

5

使用 is NULL 而不是等于 NULL :

WHERE columnName IS NULL
于 2012-05-16T13:33:45.543 回答
5

首先,使用SQL 参数。这将防止SQL 注入。不敢相信还没有人提到这一点。5个答案,到目前为止,我是唯一一个提到这一点的人。

像这样构造你的命令:

SqlCommand cmd = new SqlCommand(
"INSERT INTO table ([Tag ID]) SELECT TOP 1 @newPhoneNumber FROM [table] WHERE columnName IS NULL");
cmd.Parameters.Add("@newPhoneNumber", Sqldbtype.nvarchar).Value = textBox.Text;
cmd.ExecuteNonQuery();
于 2012-05-16T13:37:13.363 回答
3

您不能使用Insert QuerywithWhere子句

由于您的价值观已经存在,即使您ColumnName IS NUll按照其他答案所说的那样写,它也行不通。

你必须使用Update query

"Update tablename set first_field_name = first_value, 
  second_field_name = second_field_value WHERE columnName IS NULL";

而且NULL不是一个值。它是一种状态。这意味着(在前端)尚未分配内存。

例如 C# 中的字符串 - 如果未分配内存,则它们为空。他们没有空值。

与问题相关的注意/警告,与答案无关:

始终注意SQL 注入。使用参数化查询(带有@的查询)。

更多关于 SQL 注入

于 2012-05-16T13:34:11.843 回答
3

使用此查询,使用IS NULL。

"INSERT INTO table ([Tag ID]) VALUES (@PhoneNumber) WHERE columnName IS NULL"

使用 ParametrizedCommand,您在其他答案中有示例。

于 2012-05-16T13:34:55.513 回答
2

有2个问题。在 SQL 中,NULL 不等于任何东西,甚至不等于 NULL。即NULL = NULL是错误的。所以第一个问题是WHERE ColumnName = NULL

其次,SQL 的语法无效。使用时不能指定 where 子句INSERT .. VALUES,必须使用SELECT .. WHEREor IF.. ELSE。例如

INSERT INTO table ([Tag ID])
SELECT  TOP 1 @PhoneNumber
FROM    YourTable 
WHERE   YourColumn IS NULL

或者

IF EXISTS (SELECT 1 FROM YourTable WHERE YourColumn IS NULL)
    BEGIN
        INSERT Table ([tAG id]) VALUES(@PhoneNumber)
    END

在这两个示例中都是Exists inYourTable的表。YourColumn

最后,尽可能避免在构建 SQL 语句时使用字符串连接。

string sql = // One of the queries above
cmd.CommandText = sql
cmd.Parameters.Add("@PhoneNumber", SqlDbType.Varchar).Value = textBox.Text;
cmd.ExecuteNonQuery();
于 2012-05-16T14:01:12.830 回答
1

使用LINQ to SQL,自动使用参数,消除SQL注入的危险。

它也比连接 SQL 语句更容易使用。

使用 LINQ to SQL 是否有助于防止 SQL 注入

如何:将行插入数据库 (LINQ to SQL)

于 2012-05-16T13:58:16.170 回答