在c#中插入语句

时间:2012-05-16 13:31:42

标签: c# sql database

我想创建一个SQL语句,它将从textBox中取出的值插入到一列中,该列中的任何值都为NULL

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

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

6 个答案:

答案 0 :(得分:5)

使用NULL而不是等于NULL:

WHERE columnName IS NULL

答案 1 :(得分:5)

首先,使用 SQL参数。这将阻止SQL Injection。不敢相信没有人提到过这个。 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();

答案 2 :(得分:3)

您不能将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 Injection。使用参数化查询(带@的那个。)。

More on SQL Injection

答案 3 :(得分:3)

使用此查询, IS 为NULL。

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

使用ParametrizedCommand,您可以在其他答案中找到示例。

答案 4 :(得分:2)

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

其次,SQL语法无效。使用INSERT .. VALUES时,您无法指定where子句,您必须使用SELECT .. WHEREIF.. ELSE。 e.g。

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();

答案 5 :(得分:1)

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

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

Will using LINQ to SQL help prevent SQL injection

How to: Insert Rows Into the Database (LINQ to SQL)