插入到 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();
而不是等于 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 Query
与Where
子句一起使用
由于您的值已经存在,即使您按照其他答案所说的那样写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 .. WHERE
或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
在这两个示例中,YourTable
是YourColumn
存在的表。
最后,尽可能避免使用字符串串联来构建 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)