如何将字符串中的元素与数据库表值进行比较

时间:2010-02-26 11:11:21

标签: c# database

在我的项目中,我必须通过文本字段给出一个字符串输入,我必须用这些值填充数据库表。我应该首先检查特定表列的值,并仅在表中没有输入字符串时添加它。

我试图将表值转换为字符串数组,但它不可能。

如果有人对此有所了解,那么您的回复将非常有价值。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

由于您说数据库表中的字符串必须是唯一的,因此只需在该字段上放置一个唯一索引并让数据库处理该问题。

CREATE UNIQUE INDEX UIX_YourTableName_YourFieldName
   ON dbo.YourTableName(YourFieldName)

每当您尝试插入具有相同字符串的另一行时,SQL Server(或任何其他正常的RDBMS)将抛出异常而不插入该值。问题解决了。

如果您需要在前端GUI上处理错误,则需要使用您熟悉的任何技术从数据库加载现有条目,例如:在ADO.NET(C#,SQL Server)中,您可以执行以下操作:

public List<string> FindExistingValues()
{
   List<string> results = new List<string>();

   string getStringsCmd = "SELECT (YourFieldName) FROM dbo.YourTableName";

   using(SqlConnection _con = new SqlConnection("your connection string here"))
   using(SqlCommand _cmd = new SqlCommand(getStringsCmd, _con)
   {
      _con.Open();      

      using(SqlDataReader rdr = _con.ExecuteReader())
      {
         while(rdr.Read())
         {
             results.Add(rdr.GetString(0));
         }
         rdr.Close();
      }

      _con.Close();      
   }

   return results;
}

您将从该方法返回List<string>,然后您可以在您的UI中检查列表中是否已存在给定字符串:

List<string> existing = FindExistingValues();

if(!existing.Contains(yournewstring))
{
    // store the new value to the database
}

或第三个选项:您可以编写一个存储过程来处理新字符串的存储。在其中,首先检查数据库中是否已存在该字符串

IF NOT EXISTS(SELECT * FROM dbo.YourTableName WHERE YourFieldName = '(your new string)')
    INSERT INTO dbo.YourTableName(YourFieldName) VALUES(your-new-string-here)

如果没有,插入它 - 你只需要找到一个策略如何处理传入的新字符串确实已经存在的情况(忽略它,或报告某些类型的错误)。

很多选项 - 取决于您在哪种情况下效果最佳!