C #: обновить набор данных без какого-либо первичного ключа - PullRequest
2 голосов
/ 28 ноября 2009

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

Ответы [ 4 ]

1 голос
/ 04 октября 2011

Вы всегда можете найти строку, используя myTable.Select("myColumn Like 'unique value'");

1 голос
/ 28 ноября 2009

Вот пример в VB, который может дать вам общее представление.

0 голосов
/ 05 июля 2016

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

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

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);

Это работает для меня.

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

0 голосов
/ 28 ноября 2009

Можете ли вы добавить первичный ключ?

Без какого-либо уникального идентификатора (которым должен быть PK) невозможно узнать, какую строку обновить.

...