【问题标题】:How to check if the value is already there before inserting into SQL Server using asp.net?如何在使用 asp.net 插入 SQL Server 之前检查该值是否已经存在?
【发布时间】:2016-06-24 19:04:51
【问题描述】:

如何在使用 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 = "";
}

【问题讨论】:

  • 请仔细阅读this one 之类的答案。您可以修改查询以检查重复项,您可以添加唯一约束,或两者兼而有之。确切的答案实际上取决于您的用例。
  • SQL Injection alert - 你应该将你的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入
  • 在检查 SQL 中记录的存在之前,您需要知道一些独特的东西,否则在某些情况下它会失败

标签: c# sql asp.net sql-server


【解决方案1】:

一些事情。首先,如果您已经有了客户 ID,那么您就会知道该记录存在,对吗?如果您有兴趣一次性进行插入或更新,您可以使用sql MERGE statement

其次,您可能还是希望使用identity column 作为客户 ID。如果您正在执行新记录的纯插入,则无需提供 ID,因为它会自动生成。

最后,您提供的 SQL 特别容易受到 SQL 注入式攻击。您绝对想使用SQL parameterization 来防止此类漏洞。

【讨论】:

    【解决方案2】:

    您可以对 sql server 数据库表中的单个列或列组应用唯一约束。然后将你的 C# 代码包装到 try catch 块中,它会抛出重复记录的异常。

    这里是在 sql server 中创建唯一索引的链接。

    [Add unique constraint to combination of two columns

    或者你可以用 C# 来做。

    在向表中插入新记录之前,如果找到任何记录,则在具有新值的表上运行选择命令,然后重复,否则为表的新记录。

    【讨论】:

      【解决方案3】:

      这取决于您如何将其视为“值已经存在”(换句话说,您只关心一列匹配还是全部匹配?)。

      无论如何,我建议使用以下命令开始 SQL:

      IF NOT EXISTS (SELECT * FROM customers_testing WHERE XXXXX)
      BEGIN
          ...[your existing SQL]...
      END
      

      其中 XXXXX 是您不想被复制的内容。 (例如:XXXXX 可能是 WHERE customers_testing '" + textBox.Text + "')在这种情况下,我还建议使用 string.Format 来创建 SQL,这样您就可以在两个地方都引用一次控件的文本值。

      或者更好的是,我高度建议创建一个存储过程,而不是在 C# 中动态创建 SQL。这样做有很多原因,例如性能、可重用性等,但我认为最重要的原因是避免 SQL 注入的可能性。这只是更好的做法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-17
        相关资源
        最近更新 更多