2012-09-26 2 views
0

В прошлом я делал небольшие фрагменты базы данных, включая SQL (хотя я не знаю, какие они были); в одном из них я уверен, что есть ключевое слово 'occnum' или аналогичное, что позволило строке в таблице без уникальных полей быть адресованными индексом?C# OleDbDataAdapter; число вхождения?

В моей нынешней ситуации, спустя несколько лет и совершенно другом рабочем месте, я столкнулся с написанием приложения C#, которое позволяет редактировать базу данных Access для конкретной компании. В этой базе данных отсутствуют первичные ключи, поэтому я попытался найти аналогичную функциональность «число номеров» для редактирования определенных строк и ничего не нашел. Изменение структуры базы данных не является опцией, и ни одно из полей не является уникальным.

В качестве примера, я использую OleDbDataAdapter для запроса некоторых строк следующим образом:

 List<string> result = new List<string>(); 

     DataSet dataSet = new DataSet(); 
     OleDbDataAdapter oleDBA = new OleDbDataAdapter(new OleDbCommand("SELECT " + FIELDNAME_ITEMDATA_TAG + " FROM " + TABLENAME_ITEMDATA + " WHERE " + FIELDNAME_ITEMDATA_AREANUMBER + " = " + Area.ToString(), oleDbConnection)); 
     oleDBA.Fill(dataSet, "ResourceString"); 

     foreach (DataRow dr in dataSet.Tables[0].Rows) 
     { 
      result.Add(dr.ItemArray[0].ToString()); 
     } 

Списка строки затем используются для заполнения ListBox. При записи на поле списка заселены, я хотел бы иметь возможность запросить отдельную строку по его количеству вхождений, что-то вроде:

"SELECT " + FIELDNAME_ITEMDATA_TAG + " FROM " + TABLENAME_ITEMDATA + " WHERE " + FIELDNAME_ITEMDATA_AREANUMBER + " = " + Area.ToString(), oleDbConnection AND OCCNUM = " + OccNum 

Является ли это выполнимо? Я просто не смог найти правильное ключевое слово?

+0

Вы действительно, ** действительно ** хотите параметризовать эти запросы «OleDbCommand». Посмотрите, как использовать 'OleDbParameter'. – casperOne

+0

Если в качестве первичного ключа нет уникального столбца, есть ли какая-то _комбинация_ столбцов, которые уникальны, которые вы могли бы использовать? –

ответ

0

occnum - это функция базы данных Oracle, она недоступна через Access.

Сказанное, IIRC, Access не имеет понятия встроенного первичного ключа (который действительно то, что вы хотите). Вам придется добавить его самостоятельно.

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

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

Наконец, если вы создаете первичный ключ, который является surrogate key, вы можете сделать его автоинкрементным столбцом, чтобы вам не приходилось беспокоиться о генерации ключа при вставке новых значений.

Смежные вопросы