2016-06-26 2 views
0

У меня есть datagridview, который не связан с базой данных, там только один столбец подключается к базе данных, которая является полученным значением. Если пользователь выбирает это значение и получает подтверждение на вставку данных, то столбец таблицы, который не отображается в datagridview, который может быть обновлен.Как вычитать данные в базе данных Access с помощью datagridview

Предположим, что пользователю было выбрано одно лекарство XYZ, а его доступность - 22 после того, как пользователь выбрал 12 количество в конкретном медицине, а затем в бэкэнде (которое использует базу данных MS Access). 22-12 = 10 доступность может быть обновлена ​​для этого конкретного выбранного лекарства для что я использую код, но я получаю исключение:

Нет значения, заданное для одного или более требуемых параметров

Здесь я оклейки моего кода и изображений также, пожалуйста, помогите мне

private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e) 
{ 
    string connectionString = null; 
    connectionString = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString; 
    con.ConnectionString = connectionString; 

    string medicinename = dataGridView1.Rows[e.RowIndex].Cells["Medicine_Name"].Value.ToString(); 

    DialogResult dialogResult = MessageBox.Show("Are you sure you want to insert data", "Data insert Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Information); 

    if (dialogResult == DialogResult.Yes) 
    { 
     cmd = new OleDbCommand("update Medicine_Available_Detail set [total_available]=[@total_available]-1 where [Medicine_Name][email protected]_Name", con); 
     //cmd.Parameters.AddWithValue("@total_available", medicineavailable); 
     cmd.Parameters.AddWithValue("@Medicine_Name", medicinename); 

     con.Open(); 
     int n = cmd.ExecuteNonQuery(); 
     con.Close(); 

     MessageBox.Show("Record Updated Successfully"); 
     userlist(); 

     dataGridView1.Refresh(); 
    } 
} 

enter image description here

+0

Где вы рассчитать новую величину или где у вас есть количество лекарства, чтобы уменьшить значение базы данных? – Steve

ответ

0

Да, это из-за следующей строки. Вы не передаете параметр @total_available. Раскомментируйте приведенную ниже строку и она должна работать. Кроме того, нет необходимости использовать [] вокруг имени параметра [@total_available]

//cmd.Parameters.AddWithValue("@total_available", medicineavailable); 

Ваш запрос ожидает два параметра @total_available и @Medicine_Name

update Medicine_Available_Detail set [total_available]=[@total_available]-1 
where [Medicine_Name][email protected]_Name 
0

Предположим, что у вас есть поле (или где-то текстовое поле), где вам пользователь вводит количество проданного лекарства. Это значение - это значение, которое должно быть вычтено из поля Total_Available в вашей таблице.

Итак, сначала вы получите это значение из строки сетки, затем подготовьте запрос, в котором параметр вычитается из поля Total_Available.
На данный момент ваша таблица обновляется правильно

private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e) 
{ 
    string connectionString = null; 
    connectionString = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString; 
    con.ConnectionString = connectionString; 

    string medicinename = dataGridView1.Rows[e.RowIndex].Cells["Medicine_Name"].Value.ToString(); 

    // This is the hypothetical field where the user types the quantity of medicine sold. 
    // It could be a cell of your datagridview or just a textbox somewhere in 
    // your form. Here I suppose a cell of the grid. 
    int Medicine_SoldQuantity = Convert.ToInt32(dataGridView1.Rows[e.RowIndex] 
             .Cells["Medicine_Sold_Qty"].Value); 

    DialogResult dialogResult = MessageBox.Show("Are you sure you want to insert data", 
           "Data insert Confirmation", 
           MessageBoxButtons.YesNo, 
           MessageBoxIcon.Information); 
    if (dialogResult == DialogResult.Yes) 
    { 

     // Here the field total_available is used in the expression 
     // to decrement itself of the value extracted from Medicine_SoldQuantity 
     cmd = new OleDbCommand(@"update Medicine_Available_Detail 
       set [total_available]=[total_available][email protected] 
       where [Medicine_Name][email protected]_Name", con); 

     cmd.Parameters.AddWithValue("@medicineSoldQty", Medicine_SoldQuantity); 
     cmd.Parameters.AddWithValue("@Medicine_Name", medicinename); 
     con.Open(); 
     int n = cmd.ExecuteNonQuery(); 
     if(n > 0) 
       MessageBox.Show("Record Updated Successfully"); 
     con.Close(); 
     userlist(); 
     dataGridView1.Refresh(); 
    } 
} 
Смежные вопросы