C#DbCommand循环

时间:2009-09-30 15:23:01

标签: c# enterprise-library

我有一个文件集合,对于我将在事务中使用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 );

3 个答案:

答案 0 :(得分:9)

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

您也可以在循环外添加一次参数,然后在循环内更改其值。一半,另一半六十。

答案 1 :(得分:3)

如果您使用的是SQL Server 2008(许多还没有......),您可以使用表变量!查看:https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/datacenter/?p=168

这样,您可以在1个命令中完成整个文件集,从而节省了大量时间。

或者,您可以使用分隔符加入所有文件名,然后将它们拆分为SQL存储过程。

优势在于您最大限度地减少了与DB的交易,缺点是编程并不是那么简单。

答案 2 :(得分:0)

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