C# 使用Where子句将数据插入SQL数据库

C# 使用Where子句将数据插入SQL数据库,c#,sql,database,where-clause,C#,Sql,Database,Where Clause,如何使用where子句向数据库中的特定行添加数据 sql = "UPDATE table1 SET name = @textbox1, address = @textbox2 WHERE xyz"; 以下是我尝试过的: "Insert into table1 (name, address) values ('" + textbox1.Text+ "', '"+textbox2.Text+"') where (name ='"+textbox1.Text+"')" 不能使用“where”子

如何使用
where
子句向数据库中的特定行添加数据

sql = "UPDATE table1 SET name = @textbox1, address = @textbox2 WHERE xyz"; 
以下是我尝试过的:

"Insert into table1 (name, address) values ('" + textbox1.Text+ "', '"+textbox2.Text+"')
 where (name ='"+textbox1.Text+"')"

不能使用“where”子句插入insert用于添加新记录。如果要更新,请使用:

Update table1 set 
name = '" + textbox1.Text + "',
address ='" + textbox2.Text+ "' 
where (name ='"+textbox1.Text+"')
或插入内容应为:

  "Insert into table1 (name, address) values ('" + textbox1.Text+    
 "','"+textbox2.Text+"')"

但是,请确保所有内容都针对sql注入进行了验证。或者参数化上述内容。

首先,永远不要为数据库输入连接字符串。它使您极易受到SQL注入攻击。有关更多信息,请参阅

其次,您不需要使用
WHERE
子句进行插入。您可以使用
WHERE

示例:

INSERT INTO TABLE (col1, col2) VALUES (val1, val2)

UPDATE TABLE SET col1 = val1, col2 = val2 WHERE col3 = somevalue
例如,在您的案例中,您可能希望为插入(包括参数)编写此代码

如果您知道数据库字段类型,请不要使用
AddWithValue
,而是使用以下语法:

query.Parameters.Add(@parametername, SqlDBType.Type,size).Value = somevalue;
其中SqlDBType.Type是数据库字段类型(例如VarChar、Int、VarBinary等),而
size
是字段的值。如果我的DB字段是VarChar(500),那么我的参数设置将是

query.Parameters.Add(@parametername, SqlDBType.VarChar, 500).Value = somevalue;
如果要更新而不是插入,可以使用以下内容替换sql字符串。注意,使用标识符更新记录-将
名称
用作
WHERE
子句是一种不好的做法

sql = "UPDATE table1 SET name = @textbox1, address = @textbox2 WHERE xyz"; 

参数可防止用户将意外值放入允许运行未经授权代码的框中。使用当前的连接字符串可能会使攻击者破坏整个数据库

使用
INSERT
语句将记录插入SQL Server数据库时不需要where子句。您应按以下方式更改代码以使其正常工作:

"Insert into table1 (name, address) values ('" + textbox1.Text+ "', '"+textbox2.Text+"')
SQL insert语句的两种可能形式如下:

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);


INSERT INTO table_name
VALUES (value1,value2,value3,...);
您可以在此处了解有关
INSERT
SQL语句的更多信息:


什么是“不起作用”?您遇到了什么错误?这里的windows窗体是什么?如果您尝试使用插入中的where,则可能会出现重复。您真正想要的可能是更新。首先确保它。永远不要将SQL字符串与来自用户输入的数据相连接。这将使您面临SQL注入攻击演示参数化可能比使用与原始用户相同的缺陷提供解决方案更好。但我建议使用而不是AddWithValue,以便您可以指定参数的SqlDbType。根据旧的相关问题,AddWithValue在某些场景中会导致一些问题。我这样做的唯一原因是不知道数据库类型是什么。否则,我将始终添加sqldbtype.type,我将更新我的答案以反映这一点。