Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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# 不同框架语言之间的SQL日期转换_C#_Sql Server_Datetime - Fatal编程技术网

C# 不同框架语言之间的SQL日期转换

C# 不同框架语言之间的SQL日期转换,c#,sql-server,datetime,C#,Sql Server,Datetime,我有一个疑问: SqlCommand cmdImpRN = new SqlCommand("SELECT COUNT(*) FROM copies WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, DATE_TIME_COLUMN)) = @Date;", conn); cmdImpRN.Parameters.AddWithValue("@Date", DateTime.Now.ToString("MM-dd-yyyy")); n_i_rn = (int)cmdImpRN

我有一个疑问:

SqlCommand cmdImpRN = new SqlCommand("SELECT COUNT(*) FROM copies WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, DATE_TIME_COLUMN)) = @Date;", conn);
cmdImpRN.Parameters.AddWithValue("@Date", DateTime.Now.ToString("MM-dd-yyyy"));
n_i_rn = (int)cmdImpRN.ExecuteScalar();
此查询旨在返回日期\时间\列日期(非时间)等于今天日期的副本元组数。我目前正在部署到不同的.NET framework本地环境中,因此我要确保@Date添加为“MM dd yyyy”,并且在一些客户端购买并在西班牙语上安装SQL Server之前,它工作正常。现在,应用程序无法处理引发以下异常的问题:

nvarchar数据类型到日期时间数据类型的转换 导致值超出范围

看来我能做到这一点:

cmdImpRN.Parameters.Add(new SqlParameter("@Date", SqlDbType.Date){Value = DateTime.Now })
但我不确定这是不是一种方式。为什么?因为我不知道对于安装的不同.NET Framework语言,DateTime.Now是否返回不同的日期对象,因为我不知道无论DateTime.Now是以MM dd yyyy格式还是dd MM yyyy格式返回,该构造函数是否会创建有效的日期对象


有什么建议吗?提前谢谢

使用DateTime.Now.Date。它已经是一个日期时间,格式mm/dd/yyyy无关紧要。 更好的是,习惯UTC日期和时间,这样您就不必担心用户本地时间、服务器本地时间以及您拥有的东西

Date属性本身没有时间部分(设置为午夜)


使用DateTime.Now.Date。它已经是一个日期时间,格式mm/dd/yyyy无关紧要。 更好的是,习惯UTC日期和时间,这样您就不必担心用户本地时间、服务器本地时间以及您拥有的东西

Date属性本身没有时间部分(设置为午夜)


您对just DateTime的使用现在是正确的。DateTime。现在始终返回最终用户配置时区的正确日期。发生的情况是,日期以二进制格式(不依赖于区域设置)发送到服务器,而不是作为字符串,服务器直接与该二进制格式进行比较,避免了任何特定于区域设置的日期格式问题。

您仅使用DateTime。现在是正确的。DateTime。现在始终返回最终用户配置时区的正确日期。发生的情况是,日期以二进制格式(不依赖于语言环境)发送到服务器,而不是作为字符串,服务器直接与该二进制格式进行比较,避免了任何特定于语言环境的日期格式问题。

谢谢Nikki。SQL Server日期默认格式(英语将是MM-dd-yyyy,但西班牙语将是dd-MM-yyyy)又如何呢?这无关紧要。日期不表示为文本字符串。MM/dd/yyyy是转换为字符串的日期,而不是日期。当您将其作为文本发送时,Sql Server正在将其转换回日期。谢谢Nikki。SQL Server日期默认格式(英语将是MM-dd-yyyy,但西班牙语将是dd-MM-yyyy)又如何呢?这无关紧要。日期不表示为文本字符串。MM/dd/yyyy是转换为字符串的日期,而不是日期。当您将其作为文本发送时,Sql Server正在将其转换回日期。谢谢Chris,我不知道二进制比较。谢谢Chris,我不知道二进制比较。