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

我不相信这可以做到。两种选择是根据您是否要传递确切的日期来重写您的 SQL 语句,或者将 SQL 嵌入到存储过程中,然后可以检查传入的参数以查看它是否为空或其他东西并替换正确的函数调用:

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 回答