0

我最近已经就我遇到的时间问题提出了一些问题,并且我从 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 pm,则 db 存储 7:30 pm。此问题仅发生在生产服务器(共享主机)上,在我的机器上本地不会发生。我不明白为什么会发生这样的事情。有什么提示吗?

4

1 回答 1

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();
    }
}
于 2013-11-13T17:36:46.760 回答