C# 如何在使用asp.net插入SQL Server之前检查该值是否已存在?
如何在使用asp.net插入SQL Server之前检查该值是否已存在 以下是当前代码:C# 如何在使用asp.net插入SQL Server之前检查该值是否已存在?,c#,sql,asp.net,sql-server,C#,Sql,Asp.net,Sql Server,如何在使用asp.net插入SQL Server之前检查该值是否已存在 以下是当前代码: protected void Button1_Click(object sender, EventArgs e) { SqlCommand cmd = new SqlCommand("insert into customers_testing (cust_id,cust_name,cust_group,acc_mgr2,acc_mgr) values('" + textCustID.Text + "
protected void Button1_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand("insert into customers_testing (cust_id,cust_name,cust_group,acc_mgr2,acc_mgr) values('" + textCustID.Text + "','" + textCustName.Text + "','" + textCustSector.Text + "','" + dropdAccAdmin.Text + "','" + dropdAccManager.Text + "')", con);
cmd.ExecuteNonQuery();
con.Close();
Label1.Visible = true;
Label1.Text = "New Customer Added Successfully";
textCustID.Text = "";
}
一些事情。首先,如果您已经拥有客户ID,那么您将知道该记录存在,对吗?如果您对一次性插入或更新感兴趣,可以使用 第二,无论如何,您可能都希望对客户ID使用。如果您纯粹是插入一条新记录,则不需要提供ID,因为它是自动生成的
最后,您提供的SQL特别容易受到SQL注入式攻击。您绝对希望使用来防止此类漏洞。您可以对sql server数据库表中的单列或列组应用唯一约束。然后将您的C#代码包装到try-catch块中,它将对重复记录引发异常 下面是在sql server中创建唯一索引的链接 [ 或者你也可以用C
在将新记录插入到表之前,如果找到任何记录,则在具有新值的表上运行SELECT命令,否则其重复,否则其表的新记录。
< P>这将取决于如何将其视为“值已经存在”(换句话说,您只关心一列匹配或全部?) 在任何情况下,我建议使用以下命令启动SQL:IF NOT EXISTS (SELECT * FROM customers_testing WHERE XXXXX)
BEGIN
...[your existing SQL]...
END
其中XXXXX是您不希望被复制的(例如:XXXXX可能是客户测试“+textBox.Text+”)在这种情况下,我还建议使用string.Format创建SQL,这样您就可以在两个位置只引用一次控件的文本值
甚至更好的是,我强烈地建议创建一个存储过程,而不是在C#中动态创建SQL。这样做有很多原因,比如性能、可重用性等,但我认为最重要的原因是避免SQL注入的可能性。这只是更好的做法。请重新阅读通过以下答案进行ad。您可以修改查询以检查重复项,也可以添加唯一约束,或者两者都添加。确切的答案实际上取决于您的用例。可能的重复项-您不应该将SQL语句串联在一起-使用参数化查询来避免SQL注入您需要知道一些唯一的信息检查SQL中记录的存在性,否则在某些情况下会失败