如何使用where
子句将数据添加到数据库中的特定行。
以下是我的尝试:
"Insert into table1 (name, address) values ('" + textbox1.Text+ "', '"+textbox2.Text+"')
where (name ='"+textbox1.Text+"')"
答案 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语句的更多信息: