我的问题看起来很简单:在我的客户端/服务器应用程序中,我想记录客户端提供的特定日期。 问题是我不知道客户端的区域设置,我不知道SQL Server的区域设置。
客户端应用程序如何以任何格式(特定用户的上次登录)提供日期,并将其存储在可能安装了不同区域设置(法语,英语,意大利语,德语等)的SQL Server表中。 ..)。
答案 0 :(得分:4)
简单:不要使用字符串。使用键入的参数作为日期时间;可以这么简单:
DateTime when = ...
using(var cmd = conn.CreateCommand()) {
cmd.CommandText = "... @when ...";
cmd.Parameters.AddWithValue("when", when);
cmd.ExecuteNotQuery();
}
或“dapper”:
conn.Execute("... @when ...", new { when });
日期/时间实际上只是数字。只有在您将其编写/解析为字符串时才会出现格式化问题。
答案 1 :(得分:1)
只需将所有内容存储在sqlserver中的UTC日期即可。并且在检索日期时将utc日期转换为用户的时区。我希望用户时区在您的数据库中维护。 您将需要一个时区表和一个转换函数,它将UTC时间转换为用户本地时间。
答案 2 :(得分:1)
在SQL中插入日期使用“YYYYMMDD”形式的字符串 来自客户端的东西你应该知道它是什么
答案 3 :(得分:0)
您应该使用参数,但您也可以通过date.ToString("s")
答案 4 :(得分:0)
使用日期时间格式,将日期存储为UTC时间。
你可能也对datetimeoffset感兴趣。
答案 5 :(得分:0)
验证部分
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中存储数据时保持数据格式一致并在检索时与数据格式同步....