C# 在SQL中插入日期而不考虑区域设置

C# 在SQL中插入日期而不考虑区域设置,c#,sql,sql-server-2008,sql-server-2005,c#-4.0,C#,Sql,Sql Server 2008,Sql Server 2005,C# 4.0,我的问题看起来很简单:在我的客户机/服务器应用程序中,我想记录客户机提供的特定日期。 问题是我不知道客户端的区域设置,也不知道SQL Server的区域设置 客户端应用程序如何以任何格式(特定用户的上次登录)提供日期,并将其存储在SQL Server表中,该表可能安装有不同的区域设置(法语、英语、意大利语、德语等)。简单:不使用字符串。使用键入为datetime的参数;可以简单到: DateTime when = ... using(var cmd = conn.CreateCommand()

我的问题看起来很简单:在我的客户机/服务器应用程序中,我想记录客户机提供的特定日期。 问题是我不知道客户端的区域设置,也不知道SQL Server的区域设置


客户端应用程序如何以任何格式(特定用户的上次登录)提供日期,并将其存储在SQL Server表中,该表可能安装有不同的区域设置(法语、英语、意大利语、德语等)。

简单:不使用字符串。使用键入为datetime的参数;可以简单到:

DateTime when = ...

using(var cmd = conn.CreateCommand()) {
    cmd.CommandText = "... @when ...";
    cmd.Parameters.AddWithValue("when", when);
    cmd.ExecuteNotQuery();
}
或使用“整洁”:


日期/时间实际上只是数字。只有当您将其作为字符串写入/解析时,格式化才是一个问题。

简单:不要使用字符串。使用键入为datetime的参数;可以简单到:

DateTime when = ...

using(var cmd = conn.CreateCommand()) {
    cmd.CommandText = "... @when ...";
    cmd.Parameters.AddWithValue("when", when);
    cmd.ExecuteNotQuery();
}
或使用“整洁”:


日期/时间实际上只是数字。只有当您将其作为字符串写入/解析时,格式化才是一个问题。

您应该使用参数,但也可以通过
date.ToString(“s”)将日期格式化为ISO格式。
您应该使用参数,但也可以通过
date.ToString(“s”)将日期格式化为ISO格式

只需将UTC日期中的所有内容存储在sqlserver中即可。在检索日期时,将utc日期转换为用户的时区。我希望您的数据库中维护用户时区。
您需要一个时区表和一个转换函数,用于将UTC时间转换为用户本地时间。

只需将所有内容存储在sqlserver的UTC日期中即可。在检索日期时,将utc日期转换为用户的时区。我希望您的数据库中维护用户时区。
您需要一个时区表和一个将UTC时间转换为用户本地时间的转换函数。

使用日期时间格式,并将日期存储为UTC时间


您可能也会感兴趣。

使用日期时间格式,并将日期存储为UTC时间


您可能还对以下内容感兴趣。

要在SQL中插入日期,请使用格式为“yyyyymmdd”的字符串

来自客户端的内容您应该知道在SQL中插入日期是什么,使用格式为“YYYYMMDD”的字符串

来自客户端的内容您应该知道它是什么

验证部分

DateTime dt;
string YourDate = "Your Date";
if (DateTime.TryParse(YourDate, out dt))
{
     //Your Code
}

存储过程记录插入/检索

using (System.Data.SqlClient.SqlConnection con = new SqlConnection("YourConnection string")) 
{
    con.Open();
    SqlCommand cmd = new SqlCommand();
    string expression = "Date Parameter value";
    DateTime dt;
    if (DateTime.TryParse(expression, out dt))
    {
       //Your Code
    }
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "Your Stored Procedure";
    cmd.Parameters.Add("Your Parameter Name", SqlDbType.VarChar).Value = expression;
    cmd.Connection = con;
    using (IDataReader dr = cmd.ExecuteReader()) 
    {
       if (dr.Read()) 
       {
       }
    }
}

在Sql Server中存储数据时,在检索时保持数据格式与数据格式的一致性和同步性。…

验证部分

DateTime dt;
string YourDate = "Your Date";
if (DateTime.TryParse(YourDate, out dt))
{
     //Your Code
}

存储过程记录插入/检索

using (System.Data.SqlClient.SqlConnection con = new SqlConnection("YourConnection string")) 
{
    con.Open();
    SqlCommand cmd = new SqlCommand();
    string expression = "Date Parameter value";
    DateTime dt;
    if (DateTime.TryParse(expression, out dt))
    {
       //Your Code
    }
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "Your Stored Procedure";
    cmd.Parameters.Add("Your Parameter Name", SqlDbType.VarChar).Value = expression;
    cmd.Connection = con;
    using (IDataReader dr = cmd.ExecuteReader()) 
    {
       if (dr.Read()) 
       {
       }
    }
}

在Sql Server中存储数据时,在检索时保持数据格式一致并与数据格式同步……

UTC问题非常有效,值得一提;我的理解是,问题是关于格式的问题,但这也很重要。请注意,即使在国际上,UTC和本地日期也可能是最合适的表示形式,具体取决于上下文。UTC问题非常有效,值得一提;我的理解是,问题是关于格式的问题,但这也很重要。请注意,即使在国际范围内,UTC和本地日期也可能是最合适的表示形式,具体取决于上下文。最好不使用任何格式,但使用类型化参数。最好不使用任何格式,而是使用类型化参数