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

时间:2016-08-03 08:24:13

标签: c# sql database where-clause

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

以下是我的尝试:

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

3 个答案:

答案 0 :(得分:4)

首先,永远不要连接数据库输入的字符串。它让您对SQL注入攻击持开阔态度。有关详细信息,请参阅this MSDN article

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

执行WHERE

示例:

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

UPDATE TABLE SET col1 = val1, col2 = val2 WHERE col3 = somevalue

例如,在您的情况下,您可能希望为插入(包括参数)

写这个
sql = "INSERT INTO table1 (name, address) VALUES (@textbox1,@textbox2)"; 

SqlCommand query = new SqlCommand("connection string", sql);

query.Parameters.AddWithValue(@textbox1, textbox1.Text);
query.Parameters.AddWithValue(@textbox2, textbox2.Text);

如果您知道数据库字段类型,而不是使用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字符串。请注意,使用标识符更新记录 - 将name用作WHERE子句是不好的做法。

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

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

答案 1 :(得分:1)

您无法插入'其中'子句inseert用于添加新记录。如果您的更新,请使用:

Update table1 set 
name = '" + textbox1.Text + "',
address ='" + textbox2.Text+ "' 
where (name ='"+textbox1.Text+"')

或插入应该是:

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

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

答案 2 :(得分:0)

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

"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语句的更多信息:

http://www.w3schools.com/sql/sql_insert.asp