如何将硬编码的datetime值作为输入发送到存储过程?

Sui*_*eep 0 c# sql sql-server datetime stored-procedures

这可能听起来很容易,但我已经尝试了好几次却无法得到我想要的东西.

我有一个存储过程,其输入DATETIME类型.我通过提供硬编码字符串确保存储过程正常工作N'2012-12-31 16:45:00'.

现在我想用C#中相同的输入值执行相同的存储过程.我该如何指定值Datetime

限制更新:不允许参数化SQL

Jon*_*eet 7

(在添加对参数化SQL的限制之前编写的答案.)

我该如何指定Datetime的值?

使用参数化SQL,就像其他值一样.

using (SqlCommand command = new SqlCommand("StoredProcName", connection))
{
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.Add("@Foo", SqlDbType.DateTime).Value = 
        new DateTime(2012, 12, 31, 16, 45, 0);
    // Execute here
}
Run Code Online (Sandbox Code Playgroud)

不要试图找到合适的字符串形式.尽可能避免字符串转换.虽然我不会过于厌恶在直接的SQL语句中包含硬编码的字符串和数值,而且它们非常明显,我肯定会使用任何日期/时间值的参数来避免转换问题.(我会使用任何可能需要转义的字符串的参数......)