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 つの関数がありますが、可能であれば重複したコードを取り除こうとしています。