gpt4 book ai didi

c# - 当我使用 SELECT 查询实例化 DataAdapter 时,如何为 DataAdapter.Update 设置命令超时?

转载 作者:行者123 更新时间:2023-11-30 14:42:02 24 4
gpt4 key购买 nike

我有这样的代码:

var ds = new DataSet();
var fooIDToFoo = new Dictionary<string, Foo> {{"Foo1", foo1}, {"Food2", foo2}};
var sql = "SELECT * FROM Foo WHERE FooID IN ('Foo1', 'Foo2')";
var da = new SqlDataAdapter(sql, dbConnection);
da.SelectCommand.CommandTimeout = 60;
// Can't set da.InsertCommand.CommandTimeout because db.InsertCommand is null.
// Can't set da.UpdateCommand.CommandTimeout because db.UpdateCommand is null.
var cb = new SqlCommandBuilder(da);
var fooTable = "Foo";
da.Fill(ds, fooTable);
var fooTable = ds.Tables[fooTable];
var existingFooIDSet = new Set<string>(); // Modify any Foo that's in DB.
foreach (DataRow r in fooTable.Rows)
{
var fooID = r["ID"];
var foo = fooIDToFoo[fooID]
r["ID"] = foo.ID;
r["Bar"] = foo.Bar;
existingFooIDSet.Add(fooID);
}
foreach (var foo in fooIDToFoo.Values) // Add any Foo that's not in DB.
{
if (!existingFooIDSet.Contains(foo.FooID))
{
var foo = fooIDToFoo[fooID]
var r = fooTable.NewRow();
r["ID"] = fooID;
r["Bar"] = foo.Bar;
fooTable.Rows.Add(r);
}
}
da.Update(ds, "Steve"); // Times out!

最后一条语句超时,所以我想增加超时时间,但是,如代码注释所示,我无法设置da.InsertCommand.CommandTimeout,因为db.InsertCommand 为null,我无法设置da。 UpdateCommand.CommandTimeout 因为 db.UpdateCommand 为空。

最佳答案

解决方案是使用 DbCommandBuilder 显式获取插入和更新命令,设置它们的超时时间,然后将它们分配给 DbDataAdapter 的 InsertCommand 和 UpdateCommand 属性:

da.InsertCommand = cb.GetInsertCommand();
da.InsertCommand.CommandTimeout = timeout;
da.UpdateCommand = cb.GetUpdateCommand();
da.UpdateCommand.CommandTimeout = timeout;

这不应该发生在 da.Update(db, "Steve") 之前。

关于c# - 当我使用 SELECT 查询实例化 DataAdapter 时,如何为 DataAdapter.Update 设置命令超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3498203/

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