Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# 如何防止SQL数据库中出现类似(重复)条目?_C#_.net_Sql Server - Fatal编程技术网

C# 如何防止SQL数据库中出现类似(重复)条目?

C# 如何防止SQL数据库中出现类似(重复)条目?,c#,.net,sql-server,C#,.net,Sql Server,小组成员问,如果已经有一个“英寸”并且用户输入了一个“innch”,该怎么办。它应该被识别为一个副本。或者说数据库中有一个“巧克力”,如果用户输入“巧克力”,它应该要求确认。您需要实现一些近似字符串匹配算法,该算法比“LIKE”算法稍微聪明一些sql语句,以便能够检测字母之间有字符的类似单词 例如,如果使用类似“%INCH%”的值执行,“INCHX”将返回TRUE 但“INNCH”与任何东西都不匹配 顺便说一句,参数flavor_name_2和flavor_name_3可能是多余的,因为两边都有

小组成员问,如果已经有一个“英寸”并且用户输入了一个“innch”,该怎么办。它应该被识别为一个副本。或者说数据库中有一个“巧克力”,如果用户输入“巧克力”,它应该要求确认。

您需要实现一些近似字符串匹配算法,该算法比“LIKE”算法稍微聪明一些sql语句,以便能够检测字母之间有字符的类似单词

例如,如果使用类似“%INCH%”的值执行,“INCHX”将返回TRUE 但“INNCH”与任何东西都不匹配

顺便说一句,参数flavor_name_2和flavor_name_3可能是多余的,因为两边都有%的flavor_name将匹配开头和结尾都有额外字符的单词


近似字符串匹配:

当我有一个类似的请求时,我决定用它来衡量两个字符串之间的相似性

我在C#中实现了它,并在SQL Server中创建了一个CLR函数。例如,见


在我的例子中,我想防止用户多次输入相同的公司名称,因此当用户想要创建新公司时,他必须首先键入新公司的名称,然后程序在数据库中的现有公司中搜索,并显示按“相关性”(即Jaro–Winkler距离)排序的搜索结果。它可以帮助用户选择一个现有条目,而不是创建一个重复条目,即使输入的名称有一些拼写错误。

哦,对了,对了,感谢您指出(冗余)!:)我将查看链接:)
//CHECK IF COMPLETE DUPLICATE
query = "SELECT * FROM TBL_FLAVORS WHERE flavor_name = @flavor_name AND flavor_supplierid = @supplier_id";
                    using (SqlConnection con = new SqlConnection(connstring))
{
     con.Open();
     using (SqlCommand cmd = new SqlCommand(query, con))
     {
          SqlDataReader read;
          cmd.Parameters.AddWithValue("@flavor_name", txtFlavorName.Text.ToString());
          cmd.Parameters.AddWithValue("@supplier_id", supplierid);
          read = cmd.ExecuteReader();
          if (read.Read())
          {
                MessageBox.Show("This flavor for this supplier already exists.");
                return;
          }
          read.Close();
      }
} 

//CHECK IF ALMOST SIMILAR
//IF RECORD FOUND, RETURN
//OTHERWISE, PROCEED TO UPDATE/INSERT

query = "SELECT * FROM TBL_FLAVORS WHERE (flavor_name LIKE @flavor_name OR flavor_name LIKE @flavor_name2 OR FLAVOR_NAME LIKE @flavor_name3) AND flavor_supplierid = @supplier_id";
using (SqlConnection con = new SqlConnection(connstring))
{
     con.Open();

     using (SqlCommand cmd = new SqlCommand(query, con))
     {
           string flavorname = "%" + txtFlavorName.Text.ToString()+ "%";
           string flavorname2 = "" + txtFlavorName.Text.ToString() + "%";
           string flavorname3 = "%" + txtFlavorName.Text.ToString() + "";
           SqlDataReader read;
           cmd.Parameters.AddWithValue("@flavor_name", flavorname);
           cmd.Parameters.AddWithValue("@flavor_name2", flavorname2);
           cmd.Parameters.AddWithValue("@flavor_name3", flavorname3);
           cmd.Parameters.AddWithValue("@supplier_id", supplierid);
           read = cmd.ExecuteReader();
           if (read.Read())
           {
                 DialogResult dialog = MessageBox.Show("It is possible that this flavor for this supplier already exists. Do you want to continue?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                 if (dialog == DialogResult.No)
                 {
                       return;
                 }
            }
            read.Close();
      }
}