私があなたを正しく理解していれば、これはオプションのパラメータを使用してmssqlストアドプロシージャを呼び出す方法を説明する記事です。そして、これは私がLINQ toSQLでそのようなストアドプロシージャを呼び出すためにそれを使用した方法です:
1)次のようなオプションのパラメータを持つストアドプロシージャがあるとします。
CREATE PROCEDURE [dbo].[MyProc]
@arg1 bigint,
@arg2 datetime,
@arg3 decimal(18,2)=null,
@arg4 decimal(18,2)=null,
@arg5 int
BEGIN
...
END
2)DataContext
LINQtoSQLを使用しているものがあります
DataContext dc = new DataContext("Your connection string, for example");
3)ストアドプロシージャ名
string procName = "dbo.MyProc";
4)パラメータ辞書(例):
Dictionary<string, object> paramList = new Dictionary<string, object>()
{
{"arg1",72},
{"arg2",DateTime.Now.Date},
//arg3 is omitted and should get its default value in stored
{"arg4",250}, proc
{"arg5",777}
};
5)次に、次の方法を使用できます。
static int Foo(DataContext dc,
string procName,
Dictionary<string, object> paramList)
{
StringBuilder command = new StringBuilder("EXECUTE ");
command.Append(procName);
int i = 0;
foreach (string key in paramList.Keys)
{
command.AppendFormat(" @{0} = ", key);
command.Append("{");
command.Append(i++);
command.Append("},");
}
return dc.ExecuteCommand(command.ToString().TrimEnd(','),
paramList.Values.ToArray());
}
このような
//You should add exception handling somewhere, of course, as you need
Foo(dc, procName, paramList);
ストアドプロシージャが呼び出されます。強制パラメータは常にディクショナリに存在する必要があります。存在しないと失敗します。オプションのパラメータは省略できます。そうすると、ストアドプロシージャ自体によって定義されたデフォルト値が取得されます。
を使用Dictionary<string,object>
したので、文字列値だけでなく、任意のタイプのパラメーターを含めることができます。もちろん、それらはストアドプロシージャが期待するものを反映する必要があります。
PS:ms sql 2008でテストしましたが、mssql2005でどのように機能するか完全にはわかりません。