C# 哪种SQL日期格式

C# 哪种SQL日期格式,c#,sql,sql-server,tsql,datetime,C#,Sql,Sql Server,Tsql,Datetime,T-SQL使用哪种日期格式?它是否依赖于系统日期?无论系统日期格式如何,如何确保正确传递参数。这个问题是因为错误: 将数据类型nvarchar转换为datetime时出错 部分SQL脚本: CREATE PROCEDURE [dbo].[sz_pipeline04_pipelUpdte_inventory] -- Add the parameters for the stored procedure here @myFixDte datetime, @doInsert bit AS

T-SQL使用哪种日期格式?它是否依赖于系统日期?无论系统日期格式如何,如何确保正确传递参数。这个问题是因为错误:

将数据类型nvarchar转换为datetime时出错

部分SQL脚本:

CREATE PROCEDURE [dbo].[sz_pipeline04_pipelUpdte_inventory] 
-- Add the parameters for the stored procedure here
@myFixDte datetime,
@doInsert bit   
AS   
BEGIN
调用c#代码:


已编辑的问题。

这是无效的日期时间格式
DD-MM-YYYY

您可以在以下情况下使用它:

DECLARE @myFixDte DATETIME
SET @myFixDte = CONVERT(DATE, N'30-12-2012', 104)
SELECT @myFixDte 
或者您可以设置它,而无需转换为其他格式,如
YYYY-MM-DD

尝试以下操作:

@myFixDte = convert(datetime, '30-12-2012', 105) 

并检查@N.Molderf提供的链接

SQL Server总是以相同的方式识别一种格式,而不管它使用哪种区域性,并且该格式是
YYYYMMDD


因此,您可以始终以
20120202
20151225
的格式使用日期,SQL Server将使用相同的掩码解析该参数。

为什么您没有如上所述告诉c#datetime,下面是一个简单的示例,告诉您如何在您的情况下解决此问题,它将是这样的

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("dd-MM-yyyy HH:mm:ss"); 
还是这个

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");

第二个是默认的

您现在发布的代码看起来是正确的-除了一件事:

command.Parameters.Add("@myFixDte", SqlDbType.DateTime).Value = DateTime.Parse(fixDate.ToShortDateString());
正如我在评论中所说,只有在转换为字符串时,才会出现格式问题。所以,只要做:

command.Parameters.Add("@myFixDte", SqlDbType.DateTime).Value = fixDate;
DateTime
s(C#)和
DateTime
(T-SQL)没有格式。将格式转换为字符串时会出现格式问题。在它们的本机表示中,它们通常只是一些事件(滴答声、毫秒等)的计数,因为在过去的某个固定点。ADO.Net知道如何将
DateTime
转换为SQL Server
DateTime


如果您还有剩余的转换问题,那么它将出现在您尚未显示的代码中。但这同样是因为您正在转换正确的数据类型(
datetime
)并使用字符串。

关于将varchar转换为数据的链接type@N.Molderf谢谢然而,这里的问题不是关于SQL中的日期格式,而是我如何知道/获取SQL中使用的当前日期格式,或者一个每次都可以使用任何SQL日期格式的函数。因此,我在c#应用程序中发送参数,GUI日期控件根据系统日期格式更改日期格式-很好:我认为SQL遵循相同的逻辑,但显然不是-我如何传递这些参数。理想情况下,如果您是从另一种语言访问SQL,使用参数将数据作为
DateTime
值传递,让语言绑定/数据访问库处理到SQL Server的
DateTime
类型的转换,并避免将其作为字符串传递。只有当您将值作为字符串而不是适当的类型传递时,才会出现格式问题。@Damien_the_unsiver:我已经来回尝试了(日期或字符串参数),但失败了。这是我的脚本:如果你想显示更多的代码,请回答你的问题。见上文。我认为格式不仅是日、月和年的顺序,而且是分隔符(“-”或“.”或“/”):我如何知道正在使用哪个?这假设我将把字符串参数传递给sql。我正在传递日期时间格式。哪一个是最好的?在您的情况下,您不知道您的sql端的datetime,所以这个解决方案对您来说会更好,只需尝试一下它是如何实现的work@Chagbert有没有可能日期实际上超出了这个范围?它是否来自用户输入?如果这两个问题的答案都是肯定的,然后您应该经常检查-否则您的应用程序将容易出错。感谢Molderf-这个建议使我最终使用了一个字符串参数,我会立即在SQL过程中转换它-请参阅@Stanislovas Kalaš的答案nikovas@Chagbert-不幸的是,这不是正确的解决方案。在处理日期时,应始终使用date[time]SQL参数-使您的过程独立于当前区域性或任何日期格式(除非您的数据库包含日期作为字符串,这完全是另一个问题)。和-SQL日期格式不是yyyymmdd类型的格式-SQL日期格式是日期的某种二进制表示形式,取决于使用的确切格式。你是对的-我当时不知道,但在搜索了很多Google和SQL文档后,我意识到了。请勾选答案左上角的“V”。
command.Parameters.Add("@myFixDte", SqlDbType.DateTime).Value = fixDate;