2014-02-06 76 views
0

我的工作,我需要從一個列表框,並從2日期選擇器選擇要顯示在DataGridView中的代碼的選擇項選擇查詢。從列表框和日期範圍

我的代碼,第一個版本已經與剛纔的日期範圍的工作,但我已經包含列表框,我開始收到錯誤。

這裏是我的查詢:

private void button6_Click(object sender, EventArgs e) 
    { 
     OleDbDataAdapter ad = new OleDbDataAdapter("select * from customer where network_name=" + listBox1.SelectedItem.ToString() +" where date_loaded between #" + dateTimePicker1.Value.ToShortDateString() + "# and #" + dateTimePicker2.Value.ToShortDateString() + "#", mycon); 
     DataSet ds = new DataSet(); 
     ad.Fill(ds, "load"); 
     dataTable = ds.Tables["load"]; 

     if (ds.Tables[0].Rows.Count > 0) 
     { 
      dataGridView1.DataSource = ds; 
      dataGridView1.DataMember = ds.Tables[0].ToString(); 
     } 
    } 
+0

我想知道我的查詢有什麼問題 –

+0

接收到的錯誤是什麼?正如邁克所說,這可能只是圍繞字符串的引號而已。 –

+0

{ 「語法錯誤(缺少操作者)在查詢表達式 'NETWORK_NAME =智能只需驚人其中之間#2/6/2014年#和#2/7/2014年#date_loaded'。」}它是在ad.Fill(DS,「負載「); –

回答

4

網絡名稱是文本值,因此需要將其包裹在單引號。另外,你有兩個其中條款。替換第二個與AND子句,並且在一組括號的包裹。試試這個:

OleDbDataAdapter ad = new OleDbDataAdapter("select * from customer where network_name='" + listBox1.SelectedItem.ToString() +"' AND (date_loaded between #" + dateTimePicker1.Value.ToShortDateString() + "# and #" + dateTimePicker2.Value.ToShortDateString() + "#)", mycon); 
+0

感謝:D它的工作! –

-1

你有兩個在你的查詢中,用第二個替換爲和。

select * from customer where network_name=" + listBox1.SelectedItem.ToString() +" and date_loaded between #" + dateTimePicker1.Value.ToShortDateString() + "# and #" + dateTimePicker2.Value.ToShortDateString() + "#" 
1

請參數化您的查詢。準備好的聲明可以防範SQL注入攻擊並且性能更好。參見:Give me parameterized SQL, or give me death

我已經不是我自己太熟悉OLEDB(更多MySQL的傢伙),但它應該是這樣的。

cmd.Connection = mycon; 
cmd.CommandText = "SELECT * FROM customer WHERE " + 
     "network_name = ? AND (date_loaded BETWEEN #?# and #?#)" 

cmd.Parameters.Add("@network_name", OleDbType.VarChar); 
cmd.Parameters.Add("@D1", OleDbType.DBDate); 
cmd.Parameters.Add("@D2", OleDbType.DBDate); 

cmd.Parameters["@network_name"].Value = listBox1.SelectedItem.ToString(); 
cmd.Parameters["@D1"].Value = dateTimePicker1.Value.ToShortDateString(); 
cmd.Parameters["@D2"].Value = dateTimePicker2.Value.ToShortDateString(); 


OleDbDataAdapter ad = new OleDbDataAdapter(cmd);