我插入了一個datetime字段到sql server。從我的本地計算機,它工作得很好。例如:sql server中的datetime字段是:「2013-07-31 08:00:00:00」,但是當我運行應用程序時,它會切換日期和月份,並像這樣插入: 「2013-07- 31 15:15:00.000「。將DateTime插入到sql server 2008時出現奇怪的錯誤
根據今天的日期,我的相關頁面從sql服務器加載一些條目。 像這樣:
public List<act_event> return_event_list(DateTime date) //return all events for spesific date
{
List<act_event> event_list = new List<act_event>();
String date_sql = date.ToString("yyyy-MM-dd");
using (SqlConnection con = connect("igroup20_test2ConnectionString"))
{
using (SqlCommand cmd = create_command(con, "select * from act_events where '" + date_sql + "'>=(CAST(e_start as DATE)) and '" + date_sql + "'<=(CAST(e_end as DATE))"))
{
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
act_event a_event = new act_event();
a_event.e_num = Convert.ToInt32(rdr["e_num"]);
a_event.name = rdr["e_name"].ToString();
a_event.start = Convert.ToDateTime(rdr["e_start"]);
a_event.end = Convert.ToDateTime(rdr["e_end"]);
a_event.description = rdr["e_description"].ToString();
a_event.address = rdr["e_address"].ToString();
event_list.Add(a_event);
}
}
}
}
return event_list;
}
這是我如何插入日期時間字段:
public void add_event(act_event add_avent)
{
using (SqlConnection con = connect("igroup20_test2ConnectionString"))
{
using (SqlCommand cmd = create_command(con, "insert into act_events values(@e_name, @e_start, @e_end, @e_description, @e_address)"))
{
cmd.Parameters.AddWithValue("@e_name", add_avent.name);
SqlParameter param2 = new SqlParameter("@e_start", SqlDbType.DateTime);
param2.Value = add_avent.start;
cmd.Parameters.Add(param2);
SqlParameter param3 = new SqlParameter("@e_end", SqlDbType.DateTime);
param3.Value = add_avent.end;
cmd.Parameters.Add(param3);
//cmd.Parameters.Add(new SqlParameter("@e_start", SqlDbType.DateTime));
//cmd.Parameters["@e_start"].Value = DateTime.Parse(add_avent.start.ToString());
//cmd.Parameters.Add(new SqlParameter("@e_end", SqlDbType.DateTime));
//cmd.Parameters["@e_end"].Value = DateTime.Parse(add_avent.end.ToString());
cmd.Parameters.AddWithValue("@e_description", add_avent.description);
cmd.Parameters.AddWithValue("@e_address", add_avent.address);
cmd.ExecuteNonQuery();
}
//using (SqlCommand cmd2=create_command
}
}
我試圖改變選擇命令,添加此:
using (SqlCommand cmd = create_command(con, "select * from act_events where ('" + date_sql + "'>=(CAST(e_start as DATE)) and '" + date_sql + "'<=(CAST(e_end as DATE))) or ('" + date_sql2 + "'>=(CAST(e_start as DATE)) and '" + date_sql2 + "'<=(CAST(e_end as DATE))) "))
但有些日期會給我一個錯誤:
Conversion failed when converting date and/or time from character string.
我該怎麼辦?
編輯:
我試圖運行從SQL工作室本身這樣的查詢:
select * from act_events where ('2013-08-03'>=(CAST(e_start as DATE)) and '2013-08-03'<=(CAST(e_end as DATE))) or ('2013-03-08'>=(CAST(e_start as DATE)) and '2013-03-08'<=(CAST(e_end as DATE)))
它給了我:
但是,如果我跑它是這樣的:(不同日期)
select * from act_events where ('2013-07-30'>=(CAST(e_start as DATE)) and '2013-07-30'<=(CAST(e_end as DATE))) or ('2013-30-07'>=(CAST(e_start as DATE)) and '2013-30-07'<=(CAST(e_end as DATE)))
它給了我這個錯誤:
EDIT2:
詹姆斯的建議後,我犯了這樣的一個參數化查詢:
String date_sql = date.ToString("yyyy-MM-dd");
String date_sql2 = date.ToString("yyyy-dd-MM");
using (SqlConnection con = connect("igroup20_test2ConnectionString"))
{
using (SqlCommand cmd = create_command(con, "select * from act_events where @date1>=(CAST(e_start as DATE)) and @date2<=(CAST(e_end as DATE))"))
{
cmd.Parameters.AddWithValue("@date1", date_sql);
cmd.Parameters.AddWithValue("@date2", date_sql);
cmd.Parameters.AddWithValue("@date3", date_sql2);
cmd.Parameters.AddWithValue("@date4", date_sql2);
仍然將不會加載更正從SQL Server
然後t輸入我嘗試此查詢:
String date_sql = date.ToString("yyyy-MM-dd");
String date_sql2 = date.ToString("yyyy-dd-MM");
using (SqlConnection con = connect("igroup20_test2ConnectionString"))
{
using (SqlCommand cmd = create_command(con, "select * from act_events where (@date1>=(CAST(e_start as DATE)) and @date2<=(CAST(e_end as DATE))) or (@date3>=(CAST(e_start as DATE)) and @date4<=(CAST(e_end as DATE)))"))
{
cmd.Parameters.AddWithValue("@date1", date_sql);
cmd.Parameters.AddWithValue("@date2", date_sql);
cmd.Parameters.AddWithValue("@date3", date_sql2);
cmd.Parameters.AddWithValue("@date4", date_sql2);
並再次,它只是給我:
Conversion failed when converting date and/or time from character string.
'yyyy-MM-dd'是'datetime'的一種模糊格式(但不是'date')。它根據登錄的默認語言進行解釋。 'yyyyMMdd'沒有問題。 –