C #: обновить набор данных без какого-либо первичного ключа
-
06-07-2019 - |
Вопрос
Можно ли в C # использовать OleDbAdapter и использовать его метод Update для набора данных, когда у таблицы нет первичного ключа, и как я могу это сделать?
Решение
Вот пример в VB, который может дать вам общее представление. р>
Другие советы
Вы всегда можете найти строку, используя myTable.Select (" myColumn Like 'unique value' ");
Можете ли вы добавить первичный ключ?
Без какого-либо уникального идентификатора (которым должен быть PK) невозможно узнать, какую строку обновить.
У меня возникла та же проблема, когда я использовал стороннюю базу данных. У них нет первичных ключей в их базе данных, но у них есть комбинация уникальных полей.
Сначала создайте таблицу данных и заполните ее результатом запроса, используя уникальное условие.
DataTable dt = new DataTable();
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand(sqlstring, ACCESS_dbConnection);
adapter.Fill(dt);
Во-вторых, замените ds обновленными данными по столбцу.
foreach (DataColumn col in datarow.Columns)
{
Debug.WriteLine(col.ColumnName);
ds.Rows[0][col.ColumnName] = datarow.Rows[0][col.ColumnName];
}
Затем вы можете обновить.
OleDbCommandBuilder cb = new OleDbCommandBuilder(adapter);
adapter.UpdateCommand = cb.GetUpdateCommand();
adapter.InsertCommand = cb.GetInsertCommand();
adapter.Update(ds);
Это работает для меня.
Делайте это только тогда, когда вы уверены, что есть только один запрос данных. Если нет, возможно, вы захотите добавить «если» проверка р>