SQL Server复制数据
问题描述:
我的程序使用C#复制存储在SQL Server中的所有数据;下面的if
声明有什么问题?SQL Server复制数据
if (input.StartsWith("H") && input2.Equals("01"))
{
conn.Open();
comando.CommandText = "INSERT INTO data(id, name, time) VALUES ('" + textBox1.Text + "', '" + textBox2.Text + "', GETDATE())";
comando.ExecuteNonQuery();
conn.Close();
textBox1.Clear();
}
if (input.StartsWith("H") && input2.Equals("02"))
{
conn.Open();
comando.CommandText = "INSERT INTO data(id, name, time) VALUES ('" + textBox1.Text + "', '" + textBox2.Text + "', GETDATE())";
comando.ExecuteNonQuery();
conn.Close();
textBox1.Clear();
textBox2.Clear();
}
else
{
//do nothing
}
答
为避免重复,可以使用if exists语句添加检查id是否已经存在。希望这会起作用。
答
将主键约束放在Id列上,如果Id可用,也检查是否存在。如果是,则更新插入。
你可以让你的查询是这样的:
IF EXISTS (SELECT 1 FROM data WHERE Id = '" + textBox1.Text + "')
UPDATE data SET name = '" + textBox2.Text + "', time = GETDATE()
ELSE
INSERT INTO data(id, name, time) VALUES ('" + textBox1.Text + "', '" + textBox2.Text + "', GETDATE())
我没有测试它是否有效,但你可以使用它作为参考。
但是是让这个查询paramaterize查询,以避免像其他人说的SQL注入。你可以看到下面的链接如何使你的查询作为paramatrize查询: https://www.aspsnippets.com/Articles/Parameterized-Queries-ADO.Net.aspx https://visualstudiomagazine.com/articles/2017/07/01/parameterized-queries.aspx
我希望这会帮助你。 :)
当你调试时会发生什么? 'input2'中的值是什么?请不要使用字符串连接来构建SQL查询(SQL注入),因为它是相同的查询,你可以加入两个'if语句' –
这两个sql语句是相同的... 顺便说一句,看看参数化查询避免SQL注入 –
[SQL注入警报](http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - 你应该**永远不会EVER **串联在一起你的SQL语句就像这样 - ***总是使用**参数化查询**来避免SQL注入 –