0

3 つの異なるストアド プロシージャを使用して、データベースを 3 回呼び出すデータ レイヤーを作成しています。最初に、3 次元の結果を取得するために 3 つの異なる関数を作成しました。1 つ目は単一の値を返し、2 つ目は行全体を返し、3 つ目はテーブルを返します。また、さまざまなパラメーターを受け取ります。最初は 2 つの varchar、2 番目は 2 つの int、最後の 3 つの varchar を受け取ります。以下に示すように、気を利かせてすべてをマージしようとすると、問題が発生しますか?

public void CallStoredProcedure(string[] astrParams, string strConnectionString, string strStoredProcedure)
{
    int nParams = 0;
    SqlParameter[] asqlParams;
    asqlParams = SqlHelperParameterCache.GetSpParameterSet(strConnectionString, strStoredProcedure);
    foreach (string strParam in astrParams)
    {
        asqlParams[nParams].Value = strParam;
        nParams++;
    }
}

あるいは、何が入っているかを知らずに混合データ型の配列を使用したり、要素を置き換えて同じ配列に異なる型を割り当てたりすることはできますか?

object[] aParams;
string strName = "Joe";
long lngHeight = 180;
object[0] = strName;
object[1] = lngHeight;
CallStoredProcedure(aParams, strConnectionString, "StoredProcedure1")

long lngWeight = 3;
string strItemName = "Bookend";
object[0] = lngWeight;
object[1] = strItemName;
CallStoredProcedure(aParams, strConnectionString, "StoredProcedure2")

そして、その関数内のコードを次のように変更します。

foreach (object oParam in astrParams)
{
    asqlParams[nParams].Value = oParam;
    nParams++;
}

ToString()これらのケースのいずれかまたは両方で使用する必要がありますか? もしそうなら、それは本質的にそれらを同じものに変えますか? 私が言ったように、現在、正しく入力されたすべてのパラメーターを受け取る 3 つの関数がありますが、可能であれば重複したコードを取り除こうとしています。

4

2 に答える 2

1

異なるデータ型の配列を持つことはできませんが、オブジェクトの配列を持つことができ、値を型付き変数に保存するときに個々の要素を特定のデータ型にキャストできます。

どこで使用するかはわかりませんToString()が、文字列をオブジェクト配列に保存する場合は意味がありませんが、オブジェクトを文字列変数に保存する場合は、はい、これを行う必要があります:

string str = objectArray[0].ToString();

私はこの全体の混乱を避け、DJ KRAZEが言ったことに従い、パラメータを追加しますParameter.AddWithValue.

于 2014-10-17T19:48:34.617 に答える