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