(与this post相关,但不相同。)
有没有办法使用SqlParameter来指定应该通过调用服务器上的函数来获取值? E.g。
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字符串中嵌入调用,但有时我想设置一个显式值而不是调用函数,所以它有点乱。
我不想在客户端计算机上获取日期,因为由于时区差异,这可能与服务器上的日期不同。
从docs我看不出它是怎么做的,但我想在放弃之前我会和你们一起检查。谢谢!
答案 0 :(得分:3)
您不能将函数名称作为参数传递并让它执行。
如果您知道函数名称,为什么不直接使用它:
var cmd =
new SqlCommand("update Table set ADateField = sysutcdatetime() where Id = @id");
答案 1 :(得分:1)
我不相信这可以做到。有两个选项可以根据您是否要传递确切的日期来重写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();