2016-05-27 4 views
-5

私はこのコードを持っている:SqlParameterの配列にメンバーを追加するにはどうすればよいですか?

private SqlParameter[] GetSPParams() 
{ 
    SqlParameter[] spParams = null; 
    int loopNum = 1; 
    while (ParamExists(loopNum)) 
    { 
     //spParams. 
     new SqlParameter() 
     { 
      ParameterName = GetParamName(loopNum), 
      SqlDbType = GetSqlDbType(loopNum), 
      Value = GetParamValue(loopNum) 
     }; 
     loopNum++; 
    } 
    return spParams; 
} 

...あなたが見ることができるように、リターンは常にNULLいます。

"spParams"私はIntellisenseの可能性の中に「Add」やそれ以外のものが見つからなかったためにコメントアウトされました。

ことがストアドプロシージャを実行し、私のメソッドに渡されてしまうものですので、私は、SqlParameterの配列を必要とする:

private void RunStoredProc() 
{ 
    SqlParameter[] spparams = GetSPParams(); 
    DataTable dtSPResults = SPRunnerSQL.ExecuteSQLReturnDataTable(comboBoxCPSStoredProcs.Text, 
     CommandType.StoredProcedure, 
     spparams 
    ); 
    rowsReturned = dtSPResults.Rows.Count; 
    labelRowsReturned.Text = String.Format("Rows returned: {0}", rowsReturned); 
    if (rowsReturned > 0) 
    { 
     dataGridView.DataSource = dtSPResults; 
    } 
} 

. . . 

public static DataTable ExecuteSQLReturnDataTable(string sql, CommandType cmdType, params SqlParameter[] parameters) 

は、どのように私は、SqlParameterアレイにSqlParameter値を追加することができますか?

+4

'List 'を作成してから 'ToArray'を使うことができます – Valentin

+3

テーブル値のパラメータについて読む必要があると思います。 https://msdn.microsoft.com/en-us/library/bb675163(v=vs.110).aspx – Valentin

答えて

2

arrayの代わりにList<SqlParameter>を使用すると、新しい要素を追加できるはずです。次に、メソッドToArray()を呼び出して、コレクションをarrayに変換する配列を返します。

private SqlParameter[] GetSPParams() 
{ 
    var spParams = new List<SqlParameter>(); 
    int loopNum = 1; 
    while (ParamExists(loopNum)) 
    { 
     spParams.Add(new SqlParameter() 
     { 
      ParameterName = GetParamName(loopNum), 
      SqlDbType = GetSqlDbType(loopNum), 
      Value = GetParamValue(loopNum) 
     }); 
    } 
    return spParams.ToArray(); 
} 

今、あなたはNEMメンバーを追加する必要がある場合、あなたはSqlParameterから派生する可能性がありますがdocumentationとして、このクラスはsealedです。

+1

https://msdn.microsoft.com/ru-ru/library/system.data.sqlclient.sqlparameter (v = 1.10).aspx。クラスは封印されています。 – Valentin

+1

ごめんなさい、私は 'parameters'が封印されているのか分かりませんでした。ありがとうございました! –

+1

あなたは密封されたクラスから派生することはできませんが、依然として派生することを提案しています。 – Valentin

関連する問題