【问题标题】:Check duplicate entry before inserting into SQL Server [duplicate]在插入 SQL Server 之前检查重复条目 [重复]
【发布时间】:2018-01-28 17:25:42
【问题描述】:

我只想在 SQL Server 数据库中插入一些条目。但我需要在插入前检查。关键是该表包含idname 两列。如果条目与 SQL Server 数据库中的条目完全相同,则显示的代码应检查这两列并阻止插入条目。

表示数据表的两列与要插入的两个条目相同。我检查了论坛,但找不到对我的项目有用的解决方案。

private void button4_Click(object sender, EventArgs e)
{
      try
      {
           objConnection.Open();
           string query = "INSERT INTO TutorTable(Tid, Tname) VALUES(N'" + tidTextBox.Text + "','" + tnameTextBox.Text + "')";

           SqlDataAdapter SDA = new SqlDataAdapter(query, objConnection);

           SDA.SelectCommand.ExecuteNonQuery();

           objConnection.Close();
           MessageBox.Show("ok!");
       }
       catch(Exception ex)
       {
           MessageBox.Show("error");
       }

       objConnection.Close();      
}

【问题讨论】:

  • 请阅读 SqlCommandParameters。您的 SQL 语句对 sql 注入攻击开放
  • 学习使用参数并用您正在使用的数据库标记您的问题。
  • @rene 安全问题不在我的考虑范围之内。我只想在插入之前检查重复的数据
  • 您已经尝试了哪些想法?就像做一个 SELECT 来查看记录是否已经存在或在 sql 端应用约束。

标签: c# sql ado.net


【解决方案1】:

This post 解释了问题的解决方案。

基本上,您可以首先使用以下方法检查特定行的存在:

IF NOT EXIST( SELECT 1 FROM TutorTable WHERE Tid = @tid)
BEGIN
    <your insert statement...>
END

(这也是使用参数而不是 rene 建议的直接值)

然后您可以检查来自ExecuteNonQuery 的返回值,以查看实际插入了多少行。

【讨论】:

  • FROM TutorTable前面的1是什么意思?
  • FROM TutorTable前面的1是什么意思?
  • 它为每个匹配的行返回值“1”,而不是实际返回表数据...stackoverflow.com/questions/7039938/what-does-select-1-from-do
  • 谢谢斯科特。还有一个问题,如果我想检查两行我应该怎么做?我的意思是 Tid 和 Tname。
  • 只要在exist的where子句中加上AND Tname = @Tname就可以了
猜你喜欢
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 2023-04-02
  • 2014-03-16
  • 2021-01-20
  • 2017-04-03
  • 1970-01-01
相关资源
最近更新 更多