2017-02-22 91 views
0

我想,當用戶點擊的上端移動按鈕獲得總銷售額的一天進行查詢的記錄就沒有輸入日期,查詢今天的銷售C#訪問

我想不通如何做到這一點是可能的,我目前正在使用這個代碼,他必須選擇兩個日期。

我試圖與1周的DateTimePicker,但我從來沒有得到一個結果

可以在未經用戶選擇的日期呢?

using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data source=|DataDirectory|\\crepeDB.accdb;")) 
     { 

      conn.Open(); 
      string query = @"select SUM(SQuantity) AS 'Total' From Sales where Sdate = @datetime"; 
      System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(query, conn); 
      cmd.Parameters.Add("@datetime", System.Data.OleDb.OleDbType.Date).Value = dateTimePicker1.Value; 
      cmd.Parameters.Add("@datetime2", System.Data.OleDb.OleDbType.Date).Value = dateTimePicker2.Value; 
      cmd.ExecuteNonQuery(); 
      string result = cmd.ExecuteScalar().ToString(); 
      textBox1.Text = @result; 
     } 

回答

1

試試這個

using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data source=|DataDirectory|\\crepeDB.accdb;")) 
    { 
     conn.Open(); 
     string query = @"select SUM(SQuantity) From Sales where Sdate = @datetime"; 
     System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(query, conn); 
     cmd.Parameters.Add("@datetime", System.Data.OleDb.OleDbType.Date).Value = dateTimePicker1.Value.ToShortDateString(); 
     //cmd.Parameters.Add("@datetime2", System.Data.OleDb.OleDbType.Date).Value = dateTimePicker2.Value; 
     //cmd.ExecuteNonQuery(); 
     //string result = cmd.ExecuteScalar().ToString(); 
     textBox1.Text = cmd.ExecuteScalar().ToString(); 
    } 

可以在未經用戶選擇的日期呢?

是的,看看@ M.Rezaeyan的答案。

+1

嗯,將用戶輸入直接寫入SQL查詢?曾聽說過[SQL注入](https://www.xkcd.com/327/)? –

+0

@ EugeneShvets-MSFT - 真的嗎?使用C#客戶端通過DateTimePicker注入MS Access?這聽起來令人難以置信。 – anatol

+0

同意注入不可能特別使用DateTimePicker;然而,UI稍後很容易改變,而不安全的後端代碼將被派遣。直接使用用戶輸入來構建SQL查詢是不好的做法;代替合理化特定實例,將代碼更改爲使用參數會更好,因爲參數始終是安全的。 –

-1

嘗試

SELECT sum(SQuantity) as 'Total' FROM Sales WHERE Sdate = Date() 

最終

using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data source=|DataDirectory|\\crepeDB.accdb;")) 
     { 
      conn.Open(); 
      string query = @"select SUM(SQuantity) AS 'Total' From Sales where Sdate = Date()"; 
      System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(query, conn); 
      textBox1.Text = cmd.ExecuteScalar().ToString(); 
     } 
+0

你確定'CONVERT'函數可以在Access查詢中工作嗎? – anatol

+0

你可以使用Date()而不是GETDATE()和Convert方法。 –

+0

downvote的原因是什麼? –