0

(この投稿に関連していますが、同じではありません。)

SqlParameter を使用して、サーバーで関数を呼び出して値を取得するように指定する方法はありますか? 例えば

private void Test()
{
    var cmd = new SqlCommand("update Table set ADateField = @p1 where Id = @id");
    cmd.Parameters.AddWithValue("@id", 42);
    cmd.Parameters.AddWithValue("@p1", "sysutcdatetime()");  // WRONG!!
    cmd.ExecuteNonQuery();
}

呼び出しを CommandText 文字列に埋め込むことはできますが、関数を呼び出すのではなく、明示的な値を設定したい場合があるため、少し乱雑になります。

タイムゾーンの違いにより、サーバーの日付とは異なる可能性があるため、クライアントマシンで日付を取得したくありません。

ドキュメントからは、それがどのように行われるかわかりませんが、あきらめる前に皆さんに確認すると思いました. ありがとう!

4

2 に答える 2

3

関数名をパラメーターとして渡して実行させることはできません。

関数名がわかっている場合は、直接使用してみませんか。

var cmd = 
 new SqlCommand("update Table set ADateField = sysutcdatetime() where Id = @id");
于 2012-05-02T11:46:31.150 に答える
1

これができるとは思えません。2 つのオプションは、正確な日付を渡すかどうかに応じて SQL ステートメントを書き直すか、ストアド プロシージャ内に SQL を埋め込むことです。ストアド プロシージャは、渡されたパラメータをチェックして、それが null か何かであるかを確認し、正しいものに置き換えます。関数呼び出し:

var cmd = new SqlCommand("update Table set ADateField = @p1 where Id = @id");
cmd.Parameters.AddWithValue("@id", 42);
if( useFunction )
{
  cmd.CommandText = cmd.CommandText.Replace("@p1", "sysutcdatetime()");
}
else
{
  cmd.Parameters.AddWithValue("@p1", exactDate);  
}
cmd.ExecuteNonQuery();
于 2012-05-02T11:53:21.910 に答える