我最近已经就我遇到的时间问题提出了一些问题,我得到了SO成员的一些好帮助。但我仍有一些问题,我无法解决。 我在我网站的主页上有这个片段:
private string Datetime()
{
DateTime nowutc = DateTime.UtcNow;
var cet = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
var nowcet = TimeZoneInfo.ConvertTimeFromUtc(nowutc, cet);
return nowcet.ToString("F");
}
它工作正常。我得到了标签上显示的正确时间。
我在登录页面中的方法基本相同,但它没有在数据库中返回正确的时间(nowcet)。
public static void UserLogin(string iPaddress, string uname)
{
DateTime nowutc = DateTime.UtcNow;
var cet = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
var nowcet = TimeZoneInfo.ConvertTimeFromUtc(nowutc, cet);
const int MaxLength = 46;
if (uname.Length > MaxLength)
uname = uname.Substring(0, MaxLength);
string getconnstring = ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
SqlConnection conn = new SqlConnection(getconnstring);
conn.Open();
string ssql = "insert into Logins (IP, uname, dateTime) values ('" +
iPaddress + "','" +
uname + "','" +
nowcet.ToString() + "')";//HERE IS WHERE I WRITE THE TIME TO THE DB
SqlCommand cmd = new SqlCommand(ssql, conn);
cmd.ExecuteNonQuery();
conn.Close();
}
我得到的差异恰好是3个小时。如果标签显示下午4:30,则db存储在晚上7:30。此问题仅发生在生产服务器(共享主机)上,本机在我的机器上不会发生。 我不明白为什么会发生这样的事情。任何提示?
答案 0 :(得分:1)
绝不是这就是你问题的答案。这只是如何将参数传递给sql的一个示例。
string getconnstring = ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
using (var conn = new SqlConnection(getconnstring))
{
conn.Open();
string ssql = "insert into Logins (IP, uname, dateTime) values (@iPaddress, @uname, @dateTime)";
using (var cmd = new SqlCommand(ssql, conn))
{
cmd.Parameters.Add("@iPaddress", SqlDbType.VarChar, 50).Value = iPaddress; // make sure the type and size match with what in the db schema
cmd.Parameters.Add("@uname", SqlDbType.VarChar, 50).Value = uname; // make sure the type and size match with what in the db schema
cmd.Parameters.Add("@dateTime", SqlDbType.DateTime).Value = nowcet;
cmd.ExecuteNonQuery();
}
}