[英]C# DbCommand in a loop
我有一個文件集合,對於我將在事務中使用Dbcommand調用SP的每個文件。
例如:
DbCommand insert = db.GetStoredProcCommand("Insert");
db.AddInParameter(insert, "FileName", System.Data.DbType.String,
ID + ".xml");
db.ExecuteNonQuery(insert, transaction);
我的問題是如何把它放在循環中?
下面的答案不起作用,但感謝其他偉大的代碼示例。 問題是db沒有可以操作的Parameters集合。 校驗...
我這樣聲明我的數據庫:
SqlDatabase db = new SqlDatabase(this.ConnectionString );
DbCommand insert = db.GetStoredProcCommand("Insert");
foreach (string ID in myIDs)
{
insert.Parameters.Clear();
db.AddInParameter(insert, "FileName", System.Data.DbType.String,
ID + ".xml");
db.ExecuteNonQuery(insert, transaction);
}
您也可以在循環外添加一次參數,然后在循環內更改其值。 一半,六打另一半。
如果您使用的是SQL Server 2008(許多還沒有......),您可以使用表變量! 退房: https : //web.archive.org/web/1/http : //blogs.techrepublic%2ecom%2ecom/datacenter/?p = 168
這樣,您可以在1個命令中執行整個文件集,從而節省了大量時間。
或者,您可以使用分隔符將所有文件名連接起來,然后將它們拆分為SQL存儲過程。
優點是最小化到DB的事務,缺點是編程不是那么直接。
db.AddInParameter(cmd, "xxx", DbType.Int32);
db.AddInParameter(cmd, "xxx", DbType.Int32);
db.AddInParameter(cmd, "xxx", DbType.Int32);
int id = 0;
db.AddOutParameter(cmd, "ccc", DbType.Int32, id);
foreach (xxx item in xxxx)
{
db.SetParameterValue(cmd, "xxx", item.InvestmentProgramId);
db.SetParameterValue(cmd, "xxx", item.CompanyId);
db.ExecuteNonQuery(cmd);
id = (int)db.GetParameterValue(cmd, "ccc");
item.Id = id;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.