代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

C D循环中的命令

  •  2
  • JL. Hans Passant  · 技术社区  · 15 年前

    我有一组文件,对于每个文件,我将在事务中使用dbcommand调用一个sp。

    例如:

      DbCommand insert = db.GetStoredProcCommand("Insert");
      db.AddInParameter(insert, "FileName", System.Data.DbType.String, 
          ID + ".xml");
      db.ExecuteNonQuery(insert, transaction); 
    

    我的问题是,我该如何把这个放到一个循环中?

    下面的答案不起作用,但感谢您提供的代码示例。问题是数据库没有可以操作的参数集合。检查…

    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 回复  |  直到 13 年前
        1
  •  9
  •   JL. Hans Passant    15 年前
    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);
    }
    

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

        2
  •  3
  •   Community Reversed Engineer    9 年前

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

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

    或者,可以使用分隔符连接所有文件名,然后在SQL存储过程中拆分它们。

    优点是尽量减少对数据库的事务,缺点是编程没有直接进行。

        3
  •  0
  •   brainimus user417509    13 年前
    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;
    }