为数组中的每个值运行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中如何?

为数组中的每个值运行SQL存储过程

问题在于您放置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,从而将所有这些来回保存到数据库中。检查这个问题