2016-08-17 6 views
3
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#の場合はどうすればよいですか?私は試してみましたが、ループの2番目の値のために最初の値で実行され、エラーを返します:配列内のすべての値に対してSQLストアドプロシージャを実行する

The ConnectionString property has not been initialized

(コードは以下になります)

+0

あなたが助けることができるなら、複数のデータベース呼び出しをしたくないので、SPで行う必要があることをすべて実行し、配列の値を渡す必要があります。 – sr28

+0

[CUSTOM TYPE](https://msdn.microsoft.com/en-us/library/ms175007.aspx)を使用できます。次に、配列をspに送信できます。各値に対してspを呼び出す必要はありません。 – NEER

+0

ストア・プロシージャー全体を配列したい場合は、カンマで区切ってstringIDを渡すことができます。その後、ストアプロシージャでは、このカンマ区切り文字列を分割します。 http://jp.astackoverflow.com/questions/11102358/how-to-pass-an-array-into-a-sql-server-stored-procedure – user2960398

答えて

2

using (strCon)はループ内にあり、最初にstrConが破棄された後に使用するためにデータベースにオープン接続していないため問題があります。

foreachより上であることを usingを動かし

:あなたがそれを行う現在の方法に代わるものをパラメータとしてSPに配列を渡すことです

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

- など、これらすべての背中を保存し、データベースに転送します。そのようにするにはthis question

+0

はいこれをSPに渡すことでこのようにしたいと思います。任意の例の説明は、かなり認められるでしょう – MaazKhan47

+0

@ MaazKhan47 - あなたの理解の助けになりましたか? –

+0

はい、私の場合はカーソルを作成するか、whileループを使用する必要があります。データベースの – MaazKhan47

関連する問題