Sql server 2008强制日期从dd / MM / yyyy到MM / dd / yyyy

我有一个奇怪的问题与SQL Server 2008.我正在尝试将日期与dd/MM/yyyy格式保存到sql server 2008,但插入日期后它会自动转换为MM/dd/yyyy

注意:我的电脑时钟格式为dd/MM/yyyy

我的报告查看器日期文本框属性

在此处输入图像描述

我的数据库表中的日期在此输入图像描述

我的c#代码

lbldate.Text = DateTime.Today.ToShortDateString();

发布日期:05/04/2017

SQL Server是数据层 ,因此没有可用的格式; 它将日期存储为4字节数,相对于0 = 01/01/1900的天数。

Application Layer DateTime类型通常是ODBC Canonical表示,它基本上看起来像一个具有每个组件的整数属性的类(年,月,日,小时,分钟,秒,毫秒)。

表达层是您实际看到的,这是您应该关注的地方。 当您的应用程序调用ToShortDateString()方法时,它会从当前文化的线程调用显示格式,这可能会也可能不会反映区域和语言日期和时间的系统设置。

第一个解决方案是设置线程当前文化,但这只是去特定文化标准显示

 Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR"); 

解决方案编号2只是使用自定义DateTime格式字符串

 lbldate.Text = DateTime.Today.ToString("dd/MM/yyyy"); 

您所看到的是查询工具如何呈现结果,与Sql Server如何存储数据无关 。 Sql Server实际上以二进制(不可读)格式存储日期。

这是件好事。 让Sql Server存储日期(和其他数据)的方式。 您只需要担心在检索数据后如何向用户显示数据,并且大多数情况下担心格式化的最佳位置甚至根本不在服务器中,而是用您的客户端语言。

我不会说这是一个“问题”可以这么说。 这就是SQL处理日期的方式。 您的计算机时钟格式无关紧要。 要更改格式,请在查询中使用CONVERT。 例如:

 SELECT CONVERT(varchar, GETDATE(), 103) Results: 04/05/2017 SELECT CONVERT(varchar, GETDATE(), 101) Results: 05/04/2017 

代码页参数列在这里: https : //docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql

根据您的新更新进行编辑:您的C#应如下所示:

 DateTime.Now.ToString("dd/mm/yyy")