C#:在没有任何主键的情况下更新数据集

发布于 2024-08-13 05:22:46 字数 71 浏览 12 评论 0原文

当表没有主键时,在 C# 中是否可以使用 OleDbAdapter 并对其数据集使用其 Update 方法,我该如何执行此操作?

Is it possible in C# to use an OleDbAdapter and use its Update method for a dataset when a table has no primary key and how can I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

转瞬即逝 2024-08-20 05:22:46

这是一个 VB 示例,它可能会给您一个大概的了解。

Here's an example in VB, which might give you a general idea.

海的爱人是光 2024-08-20 05:22:46

您始终可以使用 myTable.Select("myColumn Like 'unique value'"); 查找行

You can always find a row using myTable.Select("myColumn Like 'unique value'");

傲影 2024-08-20 05:22:46

可以添加主键吗?

如果没有某种唯一 ID(应该是 PK),则无法知道要更新哪一行。

Can you add a primary key?

Without some kind of unique ID (which should be the PK) then there is no way of knowing what row to update.

暮凉 2024-08-20 05:22:46

我在使用第三方数据库时也遇到了同样的问题。他们的数据库中没有主键,但有唯一的字段组合。

首先,创建一个数据表,并使用唯一条件将查询结果填充到其中。

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

这对我有用。

仅当您确定存在一对一的查询数据时才执行此操作。如果没有,您可能需要添加一些“if”检查

I got the same issue when I used a third-party database. They don't have primary keys in their database, but they do have a combination of fields that are unique.

First, create a datatable, and fill it with the result of the query using the unique condition.

DataTable dt = new DataTable();
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand(sqlstring, ACCESS_dbConnection);
adapter.Fill(dt);

Second, replace ds with your updated data by column.

foreach (DataColumn col in datarow.Columns)
{
    Debug.WriteLine(col.ColumnName);
    ds.Rows[0][col.ColumnName] = datarow.Rows[0][col.ColumnName];
}

Then, you can update.

OleDbCommandBuilder cb = new OleDbCommandBuilder(adapter);
adapter.UpdateCommand = cb.GetUpdateCommand();
adapter.InsertCommand = cb.GetInsertCommand();
adapter.Update(ds);

This works for me.

Only do it when you are sure there is one at only one query data. If not, you may want to add some "if" checking

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文