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 
} 
+1

当你调试时会发生什么? 'input2'中的值是什么?请不要使用字符串连接来构建SQL查询(SQL注入),因为它是相同的查询,你可以加入两个'if语句' –

+0

这两个sql语句是相同的... 顺便说一句,看看参数化查询避免SQL注入 –

+0

[SQL注入警报](http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - 你应该**永远不会EVER **串联在一起你的SQL语句就像这样 - ***总是使用**参数化查询**来避免SQL注入 –

为避免重复,可以使用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

我希望这会帮助你。 :)