这可能听起来很容易,但我已经尝试了好几次却无法得到我想要的东西。
我有一个存储过程,其输入为DATETIME
类型。我通过提供硬编码字符串N'2012-12-31 16:45:00'
来确保存储过程正常工作。
现在我想用C#中相同的输入值执行相同的存储过程。我应该如何指定Datetime
的价值?
更新限制:不允许参数化SQL
答案 0 :(得分: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
}
不要试图找到合适的字符串形式。尽可能避免字符串转换。虽然我不会太反对在直接的SQL语句中包含硬编码的字符串和数值,它们是非常明显的,我肯定会使用任何日期/时间值的参数来避免甚至是转换问题的味道。 (我会使用任何可能需要转义的字符串的参数......)
答案 1 :(得分:0)
只需将日期时间作为参数提供给存储过程。
using (SqlConnection conn = new SqlConnection("ConnString"))
{
conn.Open();
SqlCommand cmd = new SqlCommand("Exec SP_Test @theDate",conn);
cmd.Parameters.AddWithValue("theDate",new DateTime(2012,12,31,16,45,0));
cmd.ExecuteNonQuery();
}
您还可以在测试时将硬编码值添加为存储过程中的默认参数。