gpt4 book ai didi

c# - 通过 OleDbDataAdapter.Update 将任意值插入自动编号字段

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:01 25 4
gpt4 key购买 nike

我的 Access 数据库中有一个这样的表

id  name    address     date
1 first addresss 5/6/2005 9:17:52 AM
2 test1 address1 5/11/2005 5:23:32 AM
3 test22 address2 5/11/2006 5:23:32 AM
8 test3 address3 5/11/2007 5:23:32 AM
9 test4 address4 5/11/2008 5:23:32 AM
13 test address 5/11/2008 5:23:32 AM

这里,id 字段是一个Primary Key - AutoNumber 字段。现在,如何使用 C# 将 ID 为 11 的记录插入到此表中?

当我尝试使用 id 小于 13 或大于 14 的插入时,下一个插入的值将是 14。如果我想将已删除的记录插入回表中会怎样?

解决此问题的任何解决方法或实际解决方案将不胜感激。

编辑 1:

很高兴听到可以将值插入 AutoNumber 字段。这是我用来进行批量插入的功能。 DataTable 具有相同的列名和相似的数据类型。但是正如我上面所说,代码有效,主键是自动分配的。

是否可以针对此特定代码进行任何修复?

public void AccessBulkCopy(DataTable table)
{
foreach (DataRow r in table.Rows)
r.SetAdded();

var myAdapter = new OleDbDataAdapter("SELECT * FROM " + table.TableName, _myAccessConn);

var cbr = new OleDbCommandBuilder(myAdapter);
cbr.QuotePrefix = "[";
cbr.QuoteSuffix = "]";
cbr.GetInsertCommand(true);

myAdapter.Update(table);
}

最佳答案

Access 数据库引擎确实确实允许我们使用 SQL 将任意值插入自动编号字段。如果表中还没有 [id]=11 的行,以下内容将适用于您的情况:

string sql = "INSERT INTO [YourTable] ([id], [name]) VALUES (?,?)";
using (var cmd = new OdbcCommand(sql, conn))
{
cmd.Parameters.AddWithValue("?", 11);
cmd.Parameters.AddWithValue("?", "Gord");
cmd.ExecuteNonQuery();
}

编辑

使用您的 OleDbDataAdapterOleDbCommandBuilder 自动生成的 InsertCommand 识别出 [id] 是自动编号列并从中省略它命令文本("INSERT INTO ...")。因此,您的 DataTable 中的“id”列被忽略,您将获得自动分配的 [id] 值。

如果你想在 INSERT 中包含 [id] 列,那么你需要创建自己的 OleDbDataAdapter.InsertCommand像这样:

using (var da = new OleDbDataAdapter("SELECT [id], [name] FROM [YourTable] WHERE 1=0", conn))
{
DataTable dt = new DataTable();
da.Fill(dt);

var cmd = new OleDbCommand("INSERT INTO [YourTable] ([id], [name]) VALUES (?,?)", conn);
cmd.Parameters.Add(new OleDbParameter("?", OleDbType.Integer, 0, "id"));
cmd.Parameters.Add(new OleDbParameter("?", OleDbType.VarWChar, 255, "name"));
da.InsertCommand = cmd;

DataRow dr = dt.NewRow();
dr["id"] = 11;
dr["name"] = "Gord";
dt.Rows.Add(dr);
da.Update(dt);
}

关于c# - 通过 OleDbDataAdapter.Update 将任意值插入自动编号字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39281661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com