为数组中的每个值运行SQL存储过程
本文关键字:运行 SQL 存储过程 数组 | 更新日期: 2023-09-27 18:02:41
public DataSet DataforTable(string fundID, string fromDate, string toDate)
{
string[] fundList = fundID.Split(',');
DataSet full = new DataSet();
DataTable ds = new DataTable();
full.Tables.Add(ds);
foreach (var fund in fundList)
{
using (strCon)
{
SqlCommand cmd = new SqlCommand("[dbo].[z_Formulas2]", strCon);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter sda = new SqlDataAdapter(cmd);
cmd.Parameters.Add(new SqlParameter("@Fund_ID", fund));
cmd.Parameters.Add(new SqlParameter("@XFund_ID", ""));
cmd.Parameters.Add(new SqlParameter("@Start_Dated", fromDate));
cmd.Parameters.Add(new SqlParameter("End_Dated", toDate));
sda.Fill(ds);
}
}
return full;
}
我想为基金(数组)中的每个值运行SP。我应该在SP中通过传递SP中的数组来做这个还是应该在c#中完成?如果在c#中如何?我试过了,它为第一个值运行然后为循环的第二个值运行它给出错误:
ConnectionString属性尚未初始化
(代码如下)如果在SP中如何?
问题在于您放置using (strCon)
的位置-因为它在循环中,然后在第一次strCon
将被处置之后,然后您将没有打开到数据库的连接来使用。
将using
移动到foreach
之上:
using (strCon)
{
foreach (var fund in fundList)
{
SqlCommand cmd = new SqlCommand("[dbo].[z_Formulas2]", strCon);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter sda = new SqlDataAdapter(cmd);
cmd.Parameters.Add(new SqlParameter("@Fund_ID", fund));
cmd.Parameters.Add(new SqlParameter("@XFund_ID", ""));
cmd.Parameters.Add(new SqlParameter("@Start_Dated", fromDate));
cmd.Parameters.Add(new SqlParameter("End_Dated", toDate));
sda.Fill(ds);
}
}
当前方法的另一种替代方法是将数组作为参数传递给SP,从而将所有这些来回保存到数据库中。检查这个问题