2011-08-02 28 views
0

我是新來的asp.net和正在建設一個酒店網站。我需要將檢入日期與存儲在訪問數據庫中的檢出日期進行比較。結果通過數據網格顯示,但是當我比較它時,我得到一個數據類型不匹配標準表達式。我可以連接到訪問數據庫,並使用日曆通過文本框傳遞日期。asp.net 2010與c#和訪問2003

這是我的代碼:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    ds = new DataSet(); 
    st ="select * from abc where status = 'v'and checkout= '" + Convert.ToDateTime(TextBox1.Text) + "'"; 
    adp = new OleDbDataAdapter(st, cn); 
    int r = adp.Fill(ds, "app"); 
    GridView1.DataSource = ds; 
    GridView1.DataMember = "app"; 
    GridView1.DataBind(); 
    int intCount; 
    intCount = ds.Tables["app"].Rows.Count; 
    Label1.Text = intCount.ToString(); 

} 

protected void Calendar1_SelectionChanged(object sender, EventArgs e) 
{ 
    TextBox1.Text = Calendar1.SelectedDate.ToString("MM/dd/yy"); 
} 

回答

0

Access查詢需要的日期格式是 '#YYYY-MM-DD#',其中包括#符號和單引號。

與其自己格式化字符串,不如考慮在查詢和命令對象中使用參數,因爲它會自動處理格式。

對於最簡單的變化,修改你的線,創建SQL以下幾點:

st ="select * from abc where status = 'v'and checkout= '#" + Convert.ToDateTime(TextBox1.Text).ToString("YYYY-MM-DD") + "#'"; 
+0

對不起,我無法理解。請詳細說明進展情況。 –

+0

修改爲顯示所需更改的清晰示例。 – DoctorMick

1

不建SQL查詢自己使用參數化查詢,而不是你自己設置一個大跟頭。這應該照顧你的格式。

例如:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    ds = new DataSet(); 

    // this has changed... 
    st ="select * from abc where status = 'v'and checkout= @date"; 

    adp = new OleDbDataAdapter(st, cn); 

    // this is new... 
    adp.Parameters.AddWithValue("@date", Convert.ToDateTime(TextBox1.Text)); 

    int r = adp.Fill(ds, "app"); 
    GridView1.DataSource = ds; 
    GridView1.DataMember = "app"; 
    GridView1.DataBind(); 
    int intCount; 
    intCount = ds.Tables["app"].Rows.Count; 
    Label1.Text = intCount.ToString(); 

} 

protected void Calendar1_SelectionChanged(object sender, EventArgs e) 
{ 
    TextBox1.Text = Calendar1.SelectedDate.ToString("MM/dd/yy"); 
}