2017-02-22 78 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的原因是什么? –