簡體   English   中英

C#DbCommand循環

[英]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集合。 校驗...

http://msdn.microsoft.com/en-us/library/microsoft.practices.enterpriselibrary.data.sql.sqldatabase_members%28BTS.10%29.aspx

我這樣聲明我的數據庫:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM