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

时间:2013-11-05 07:21:55

标签: c# sql sql-server datetime stored-procedures

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

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

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

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

2 个答案:

答案 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();
}

您还可以在测试时将硬编码值添加为存储过程中的默认参数。