Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在使用asp.net插入SQL Server之前检查该值是否已存在?_C#_Sql_Asp.net_Sql Server - Fatal编程技术网

C# 如何在使用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 + "

如何在使用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 + "','" + 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中记录的存在性,否则在某些情况下会失败