插入到 C# 中的语句中

本文关键字:语句 插入 | 更新日期: 2023-09-27 18:34:16

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

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

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

插入到 C# 中的语句中

使用 NULL

而不是等于 NULL :

WHERE columnName IS NULL

首先,使用 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();
不能将

Insert QueryWhere子句一起使用

由于您的值已经存在,即使您按照其他答案所说的那样写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 注入的更多信息

使用此查询,IS NULL。

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

使用参数化命令,您在其他答案中有示例。

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

其次,SQL 不是有效的语法。使用INSERT .. VALUES时不能指定where子句,必须使用SELECT .. WHEREIF.. 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

在这两个示例中,YourTableYourColumn存在的表。

最后,尽可能避免使用字符串串联来构建 SQL 语句。

string sql = // One of the queries above
cmd.CommandText = sql
cmd.Parameters.Add("@PhoneNumber", SqlDbType.Varchar).Value = textBox.Text;
cmd.ExecuteNonQuery();
使用

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

它也比连接 SQL 语句容易得多。

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

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