sql compact中的DateTime问题

时间:2010-03-09 13:41:56

标签: c# datetime sql-server-ce globalization

我正在使用Sql Compact3.5作为我的数据库与C#.NET在不同的系统中,我得到的日期时间格式不同。在Windows XP中,它以以下格式检索日期时间:MM-dd-yyyy HH:mm:ss,在媒体中心,它以格式检索:MM / dd / yyyy hh:m:ss。有没有办法让日期时间格式不受文化影响,或者我可以在sql compact中设置日期时间格式,所以让它成为任何一台PC只会使用那种格式???

示例:

//TimeOfCall is passed as String using the format DateTime.Now.ToString("MM-dd-yyyy HH:mm:ss");
using (SqlCeConnection con = new SqlCeConnection(ConString))
{
    using (SqlCeCommand SqlceCmd = new SqlCeCommand(
         "Insert into myreports(TimeOfCall,Status) values(?,?)", con))
    {
        if (con.State == ConnectionState.Closed)
            con.Open();
        SqlceCmd.Parameters.Add(new SqlCeParameter("@TimeOfCall", strTimeOfCall));
        SqlceCmd.Parameters.Add(new SqlCeParameter("@Status", strStatus));

        int RowsaAffected = SqlceCmd.ExecuteNonQuery();
        con.Close();
        return RowsaAffected;
    }
}

在重新记录记录时,查询以这种方式使用:

//FromTime and ToTime are passeed in the same format as while storing
using (SqlCeConnection con = new SqlCeConnection(ConString))
{
    using (SqlCeDataAdapter SqlceDA = new SqlCeDataAdapter("Select TimeOfCall from myreports where TimeOfCall between '" + strFromTime + "' and '" + strToTime + "' order by TimeOfCall", con))
    {
        if (con.State == ConnectionState.Closed)
            con.Open();
        SqlceDA.Fill(dtReports);
        con.Close();
        return dtReports;
    }
}

我希望它很清楚

1 个答案:

答案 0 :(得分:3)

好的,从代码中,你基本上是以错误的方式做正确的事。

好消息是你正在使用参数 - 这是完全正确的 - 但是在设置参数值之前,你不需要不希望将日期转换为字符串。 / p>

最简单的方法是将SqlceCmd.Parameters.Add(new SqlCeParameter("@TimeOfCall", strTimeOfCall));更改为SqlceCmd.Parameters.AddWithValue("@TimeOfCall", timeOfCall));,其中timeOfCall是DateTime值。

如果状态不是字符串,则同样适用于状态。

如果您想更明确地了解类型,请首先创建参数,然后再设置它。

对于您的选择查询执行相同的操作,将参数@fromTime和@toTime替换为字符串并置,并直接从相应的DateTime值设置参数