Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将硬编码的日期时间值作为输入发送到存储过程?_C#_Sql_Sql Server_Datetime_Stored Procedures - Fatal编程技术网

C# 如何将硬编码的日期时间值作为输入发送到存储过程?

C# 如何将硬编码的日期时间值作为输入发送到存储过程?,c#,sql,sql-server,datetime,stored-procedures,C#,Sql,Sql Server,Datetime,Stored Procedures,这听起来很容易,但我已经试过好几次了,但都没能得到我想要的 我有一个存储过程,它有一个DATETIME类型的输入。我通过提供硬编码字符串N'2012-12-31 16:45:00'来确保存储过程正常工作 现在我想用C中相同的输入值执行相同的存储过程。我应该如何指定Datetime的值 限制已更新:不允许参数化SQL在添加对参数化SQL的限制之前写入回答 我应该如何指定Datetime的值 使用参数化SQL,就像其他值一样 using (SqlCommand command = new SqlCo

这听起来很容易,但我已经试过好几次了,但都没能得到我想要的

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

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


限制已更新:不允许参数化SQL在添加对参数化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语句中包含硬编码的字符串和数值,因为它们非常明显,但我肯定会对任何日期/时间值使用参数,以避免哪怕是一点点转换问题。对于可能需要转义的任何字符串,我也会使用参数…

只需向存储过程提供一个datetime作为参数

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

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

您如何调用存储过程?您自己尝试过吗??您真正面临的问题是什么?接受datetime值的方法。我尝试过其他数据类型和所有工作,请注意,我不是建议添加参数化SQL本身,我只是建议在调用现有存储过程时使用参数。proc已经在声明参数-您只需要为它们提供值…可能需要使用dateTime=new DateTime2012、12、31、16、45、0来设置硬编码的dateTime值。我不太确定如何实现。它们调用存储过程的方式是调用方法并从变量(如callSPint number_1)传递值,int number_2,因此我可以简单地通过callsp100100进行测试,存储过程将被完美地执行。区别在于这个callSP接受的是DateTime而不是int。我尝试了2012-12-31 16:45:00,但它给了我太多的字符literal@IsaacLem他们是谁?听起来你没有告诉我们一些重要的背景。您应该能够将存储过程名称和参数指定为参数,而不是直接在调用中指定。@JonSkeet:我确实了解所有最佳实践,但我必须遵守现有的编码标准,在我的情况下,以前的开发人员没有按照您的方式实现pointed@marc_s:微观优化连接将打开多长时间在我看来是毫无意义的。您认为设置参数需要多长时间?我怀疑你是否会在现实世界的任何场景中看到这一点。@marc_s:你可能错过了我的SQL命令中的EXEC。没有cmd.CommandType=CommandType.StoredProcess,它就可以正常工作。