как сравнить элементы в строке со значениями таблицы базы данных - PullRequest
0 голосов
/ 26 февраля 2010

В моем проекте мне нужно ввести строку через текстовое поле, и мне нужно заполнить таблицу базы данных этими значениями. Сначала я должен проверить значения определенного столбца таблицы и добавить входную строку, только если ее там нет в таблице.

Я пытался преобразовать значения таблицы в массив строк, но это оказалось невозможным.

Если у кого-то есть идеи по этому поводу, ваш ответ будет очень ценным.

Заранее благодарен.

1 Ответ

1 голос
/ 26 февраля 2010

Поскольку вы говорите, что ваши строки в таблице базы данных должны быть уникальными, просто поместите уникальный индекс в это поле и дайте базе данных решить проблему.

CREATE UNIQUE INDEX UIX_YourTableName_YourFieldName
   ON dbo.YourTableName(YourFieldName)

Всякий раз, когда вы пытаетесь вставить другую строку с той же строкой, SQL Server (или любая другая достойная СУБД) выдает исключение и не вставляет значение. Проблема решена.

Если вам уже нужно обработать ошибку в интерфейсном интерфейсе, вам нужно будет загрузить существующие записи из вашей базы данных, используя любую технологию, с которой вы знакомы, например, в 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> от этого метода, а затем вы сможете проверить в своем пользовательском интерфейсе, существует ли данная строка в списке:

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)

и, если нет, вставьте его - вам просто нужно найти стратегию, как справляться со случаями, когда новая передаваемая строка действительно уже существует (игнорировать ее или сообщать об ошибке какого-либо рода).

Множество вариантов - до вас, какой из них лучше всего работает в вашем сценарии!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...