0

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

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

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

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

4

2 回答 2

7

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

我应该如何指定日期时间的值?

使用参数化 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 语句中包含硬编码的字符串和数值,因为它们很明显,但我肯定会为任何日期/时间值使用参数,以避免哪怕是一点转换问题。(而且我也会对可能需要转义的任何字符串使用参数......)

于 2013-11-05T07:26:23.477 回答
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();
}

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

于 2013-11-05T07:29:34.503 回答