我正在使用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;
}
}
我希望它很清楚
答案 0 :(得分:3)
好的,从代码中,你基本上是以错误的方式做正确的事。
好消息是你正在使用参数 - 这是完全正确的 - 但是在设置参数值之前,你不需要不希望将日期转换为字符串。 / p>
最简单的方法是将SqlceCmd.Parameters.Add(new SqlCeParameter("@TimeOfCall", strTimeOfCall));
更改为SqlceCmd.Parameters.AddWithValue("@TimeOfCall", timeOfCall));
,其中timeOfCall是DateTime值。
如果状态不是字符串,则同样适用于状态。
如果您想更明确地了解类型,请首先创建参数,然后再设置它。
对于您的选择查询执行相同的操作,将参数@fromTime和@toTime替换为字符串并置,并直接从相应的DateTime值设置参数