我在堆栈溢出时发现了类似的问题,但它并没有真正回答我的问题。我需要确保我的asp.net应用程序将日期dd / mm / yyyy格式化为与我的SQL Server 2005相同。

如何验证服务器的日期文化(如果这就是它的名称)与我编写应用程序的方式相符?是否有特定的数据库设置和OS设置?它是特定于表格的吗?我不想转移我的日子和月份。

谢谢

有帮助吗?

解决方案

当您从数据库中获取DateTime时,它应该采用非文化格式(如DateTime对象,基于特定日期以来的滴答数)。只有当您将该值转换为字符串时,您才需要关注文化。在这些情况下,您可以使用yourDateTimeValue.ToString(" dd / MM / yyyy",CultureInfo.InvariantCulture)来确保信息正确显示。

其他提示

我相信如果您使用SqlParameters,ADO.NET将负责其余部分,您不必担心它。此外,它也有助于抵御SQL注入攻击! :)

**注意因为SQL DateTime列是不可为空的,它们的最小值是1/1/1753而.net DateTimes是不可为空的,最小值为1/1/0001。 **

如果您从实际的DateTime列中提取数据,默认情况下它将始终采用相同的标准格式。要将数据保存到列,您可能需要在参数中指定SqlDbType.DateTime。

我从 http://bytes.com/forum/thread767920.html:

com.Parameters.Add(" @ adate",SqlDbType.DateTime).Value = DateTime.Now;

好吧,如果你在数据库中保留datetime字段,你就不用担心了。

只要您在应用程序中保留日期强类型(DateTime变量)并使用DBParameter / SqlParameter通过预准备语句发送日期,您的数据库将按原样使用它们。

如果您使用字符串在代码中保存日期,则某些演员表将确保您发送正确的值:

string sqlCmd = @"SELECT *
   FROM MyTable
   WHERE MyDateField = CONVERT(datetime, '{0}', 101)";

// assuming myDateString is a string with a date in the local format
sqlCmd = string.Format(sqlCmd,
    Convert.ToDateTime(myDateString).ToString("yyyyMMdd"));

(代码很难看,但希望它能解决问题)

正如其他人所提到的,就文化存储日期而言,你应该没问题。我建议您将所有时间存储为标准UTC时间。在SQL Server 2005及更早版本中,无法存储时区信息,但如果所有内容都以通用时间存储,则应该没问题,因为以后可以将时间转换为本地时间。

SQL Server 2008确实有一些了解时区的数据类型,如果您使用的是.NET 3.5,则可以使用工具来协助时区处理/转换。

绝对保持通用格式的时间。如果你必须在多个时区工作,这将使世界变得与众不同。

scroll top