2017-02-20 8 views
0

Я использую этот код для вставки данных в файл база данных Accessзапрос сумма столбца во время точной даты C#

decimal quantity; 
     if (!Decimal.TryParse(textBox9.Text, out quantity)) 
      MessageBox.Show("Invalid number"); 
     else 
     { 

      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 = @"insert into Sales (Sdate,SQuantity) 
        values (@date, @qta)"; 
       System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(query, conn); 
       cmd.Parameters.Add("@date", OleDbType.Date).Value = dateTimePicker1.Value; 
       cmd.Parameters.Add("@qta", OleDbType.Decimal).Value = quantity; 
       cmd.ExecuteNonQuery(); 
      } 
     } 

Теперь я хочу, чтобы получить общий SQuantity на сегодняшний день, так что я использовал этот код, но он продолжает давать мне ошибка

public void Calculate() 
    { 

      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 SQuantity SUM(SQuantity) AS 'Total' From Sales where Sdate = '"+ dateTimePicker1.Value +"'"; 
       System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(query, conn); 
       cmd.ExecuteNonQuery(); 
      textBox1.Text = cmd.ExecuteScalar().ToString(); 

     } 

    } 

    private void frmShiftEnd_Load(object sender, EventArgs e) 
    { 
     Calculate(); 
    } 
+0

Какие ошибки? http://stackoverflow.com/help/how-to-ask – user5226582

+0

Я считаю, что вы должны вывести SQuantity из запроса в select. Должен быть выбран SUM (SQuantity) AS 'Total' ... –

+1

Вы пытаетесь указать дату в виде строки в методе 'Calculate()'. Почему бы не использовать параметр для даты, как вы делали в вставке? Вы уже знаете, что работает. –

ответ

1

Попробуйте это:

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", OleDbType.Date).Value = dateTimePicker1.Value; 

Я удалил де SQuantity и добавил значение как пары eters. Не используйте значения полей непосредственно в тексте sql. Это может привести к возникновению инцидентов с безопасностью.

+0

Спасибо за ответ, ну, это не дает мне ошибку сейчас, но возвращает пустое значение, также интересно, при просмотре файла доступа я заметил, что была добавлена ​​полная дата, включая время как «2/21/2017 2:58:34 AM ", может быть, это причина, по которой он возвращается пустым? потому что он также использует время? –

+0

Да, это может быть ... если вы хотите только поискать по дате, а затем удалить время поиска ..., которое получило на работу – NicoRiff

+0

Спасибо за ответ, Нико, но как я могу это сделать? как я могу сделать это автоматически вставлять только дату без времени и искать только дату? Я пытаюсь автоматически показывать ежедневное SQuantity, когда пользователь нажимает кнопку Shift End –

Смежные вопросы