2015-09-29 2 views
-2

Я работаю над приложением C#, которое использовалось для аптек (покупка, продажа наркотиков). Я хочу спросить, есть ли формальный способ контроля количества?! Я имею в виду .. Когда я нажимаю кнопку продажи, каковы операции с количеством, которое должно произойти?Техника контроля количества продуктов

это то, что я сделал:

MySqlCommand cmd = new MySqlCommand("insert into bills (bill_Number,bill_Date,bill_From,bill_Note,bill_TaxRate,bill_DisRate,bill_EntryDate,cus_Sup,byUser) values(" + txbBillNumber.Text + ",'" + DateTime.Parse(txbBillDate.Text).Year + "-" + DateTime.Parse(txbBillDate.Text).Month + "-" + DateTime.Parse(txbBillDate.Text).Day + "'," + sup_Id + ",'" + txb_Note.Text + "'," + taxRate + "," + disRate + ",'" + DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day + "'," + cus_Sup + ",'" + users + " | " + Environment.MachineName.ToString() + " | " + DateTime.Now.ToShortDateString() + " | " + DateTime.Now.ToShortTimeString() + "')", objConn); 
cmd.ExecuteNonQuery(); 

//get the ID 
cmd = new MySqlCommand("select max(bill_Id) from bills", objConn); 
MySqlDataReader dataReader = cmd.ExecuteReader(); 
dataReader.Read(); 
billID = int.Parse(dataReader.GetValue(0).ToString()); 
dataReader.Close(); 


//insert into Bill_Details 
for (int i = 0; i < listView1.Items.Count; i++) 
{ 

    cmd = new MySqlCommand("insert into bill_Details (bill_Id,prod_Id,de_Cost,de_Quantity,de_Bonus,de_Price,de_ExpireDate,de_DisRate) values(" + billID + "," + int.Parse(listView1.Items[i].SubItems[1].Text) + "," + decimal.Parse(listView1.Items[i].SubItems[5].Text) + "," + decimal.Parse(listView1.Items[i].SubItems[3].Text) + "," + decimal.Parse(listView1.Items[i].SubItems[4].Text) + "," + decimal.Parse(listView1.Items[i].SubItems[6].Text) + ",'" + DateTime.Parse(listView1.Items[i].SubItems[7].Text).Year + "-" + DateTime.Parse(listView1.Items[i].SubItems[7].Text).Month + "-" + DateTime.Parse(listView1.Items[i].SubItems[7].Text).Day + "'," + decimal.Parse(listView1.Items[i].SubItems[10].Text) +")", objConn); 
    cmd.ExecuteNonQuery(); 
} 

//Edit information in products table IN ADDING 
for (int i = 0; i < listView1.Items.Count; i++) 
{ 
     cmd = new MySqlCommand("update products set prod_Quantity = (prod_Quantity-"+ (decimal.Parse(listView1.Items[i].SubItems[3].Text)+decimal.Parse(listView1.Items[i].SubItems[4].Text)) +") where prod_Id=" + listView1.Items[i].SubItems[1].Text, objConn); 
     cmd.ExecuteNonQuery(); 
} 

или вы можете мне помочь со ссылкой, что может быть полезным для меня?

+2

** предупреждение ** ваш код имеет * sql injection * точки атаки. –

+0

Когда вы продаете товар, вы получаете больше или меньше этого предмета? Является ли изменение в вашем инвентаре зависимым от того, сколько вы продаете? – TZHX

+0

@TZHX, да, это зависит от! –

ответ

0

Прежде всего, обратите внимание на комментарий о SQL-инъекции. Если ваша забота о шаблонах проектирования, первый шаблон, который вы должны быть обеспокоены это правильно параметризованных команда SQL в ADO.NET

Смотрите этот пример:

  //create the command 
      var cmd = new MySqlCommand(
        "SELECT value1, value2 FROM myTable WHERE id_Field = @_id", 
        connection); 

      //add the parameter to the command, with the desired value    
      cmd.Parameters.AddWithValue("@_id", myTextBox.Text); 

Во-вторых, чтобы ответить на ваш вопрос, есть не является конкретным шаблоном, который применяется ко всем случаям. Однако я бы рекомендовал простой класс доступа к данным для представления ваших предметов инвентаря (медикаментов), и этот класс должен иметь общий метод addInventory (int сумматор). Продажа приведет к передаче отрицательного числа методу добавления запасов, который затем уменьшит инвентарь. Таким образом, продажа будет выполнена как:

 var myMedicine = new Medicine(); 
    //sell 10 units 
    myMedicine.addInventory(-10); 

В качестве альтернативы, если должна быть сделана во время продажи, кроме декремента инвентаря, его вероятно, что метод addInventory должен быть частным и называется внутренне от общественной .Sold другой работы (межды unitsSold), который также содержит дополнительную работу.

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