2016-01-02 3 views
0

У меня возникла проблема в виде системы инвентаря. Хорошо, что он работал отлично, когда было задействовано одно текстовое поле. Но когда есть 2 или более текстовых полей, они показывают ошибки конкретно: Усеченное неправильное значение DOUBLE: «Knooks and Cranies». (Knooks and Cranies - пример поставщика, который я вводил.)Неисправность в кнопке обновления системы инвентаризации C#

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

вот мой код:

namespace SupplyRequestAndInventoryManagementSystem 
{ 
    public partial class DI_Assets : Form 
    { 
     connection con = new connection(); 
     MySqlCommand cmd; 
     MySqlDataReader reader; 

     public DI_Assets() 
     { 
      InitializeComponent(); 
     } 

     //load data from database 
     private void DI_Assets_Load(object sender, EventArgs e) 
     { 
      loadDepartment(); 
     } 

     //checker 
     private void ListDelivery_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      if (ListDelivery.SelectedItems.Count > 0) 
      { 
       ListViewItem itm = ListDelivery.SelectedItems[0]; 
       lblAssetIDChecker.Text = itm.SubItems[4].Text; 
      } 
     } 

     //load data from supplier 
     private void btnSearch_Click(object sender, EventArgs e) 
     { 
      loadtbl(); 
     } 

     //add button 
     private void btnAdd_Click(object sender, EventArgs e) 
     { 
      DialogResult dg = MessageBox.Show("Are you sure you want to add new Delivery Information?", "Message", MessageBoxButtons.YesNo); 
      if (dg == DialogResult.Yes) 
      { 
       if (SuppNameCombo.Text == "" || txtProdName.Text == "" || txtProdBrand.Text == "" || txtQty.Text == "" || DTPReceived.Text == "") 
       { 
        MessageBox.Show("Don't leave blanks!"); 
       } 
       else 
       { 
        con.Close(); 
        cmd = new MySqlCommand("Select * from deliver_mat where Del_MSupplier ='" + SuppNameCombo.Text + "' and Del_MName='" + txtProdName.Text + "' and Del_MBrand ='" + txtProdBrand.Text + "' and Del_MQty= '" + txtQty.Text + "' and Del_MReceived='" + DTPReceived.Text + "'", con.con); 
        con.Open(); 
        reader = cmd.ExecuteReader(); 
        if (reader.Read()) 
        { 
         MessageBox.Show("Delivery Information already exist, sepcify a new one!"); 
        } 
        else 
        { 
         addSection(); 
         MessageBox.Show("Delivery Information successfully added!"); 
         loadtbl(); 
         txtProdName.Text = ""; 
         txtProdBrand.Text = ""; 
         txtQty.Text = ""; 
         DTPReceived.Text = ""; 

        } 

       } 
      } 
      else 
      { 
       MessageBox.Show("Adding new Delivery Information has been cancelled!"); 
      } 

     } 

     //update button 
     private void btnUpdate_Click(object sender, EventArgs e) 
     { 
      DialogResult dg = MessageBox.Show("Are you sure you want to update the section?", "Message", MessageBoxButtons.YesNo); 
      if (dg == DialogResult.Yes) 
      { 
       if (SuppNameCombo.Text == "" && txtProdName.Text == "" && txtProdBrand.Text == "" && txtQty.Text == "" && DTPReceived.Text == "") 
       { 
        MessageBox.Show("Please choose section to be updated!"); 
       } 
       else 
       { 
        updateSection(); 
        MessageBox.Show("Section has been successfully updated!"); 
        loadtbl(); 
        SuppNameCombo.Text = ""; 
        txtProdName.Text = ""; 
        txtProdBrand.Text = ""; 
        txtQty.Text = ""; 
        DTPReceived.Text = ""; 
       } 
      } 
      else 
      { 
       MessageBox.Show("Updating section has been cancelled!"); 
      } 
     } 

     //---------------------------------------------------------------------------------------------- 


     //Retrieving Data from DB to listview 
     void loadtbl() 
     { 
      con.Close(); 
      DataTable table = new DataTable(); 
      cmd = new MySqlCommand("Select * from deliver_assets where Del_ASupplier = '" + SuppNameCombo.Text + "'", con.con); 
      con.Open(); 
      reader = cmd.ExecuteReader(); 

      ListDelivery.Items.Clear(); 
      while (reader.Read()) 
      { 
       ListViewItem item = new ListViewItem(reader["Del_AName"].ToString()); 
       item.SubItems.Add(reader["Del_ABrand"].ToString()); 
       item.SubItems.Add(reader["Del_AReceived"].ToString()); 
       item.SubItems.Add(reader["Del_AQty"].ToString()); 
       item.SubItems.Add(reader["Del_aID"].ToString()); 
       item.SubItems.Add(reader["Del_ASupplier"].ToString()); 
       ListDelivery.Items.Add(item); 
      } 
     } 

     //Load Data to combo box 
     void loadDepartment() 
     { 
      con.Close(); 
      DataTable table5 = new DataTable(); 
      cmd = new MySqlCommand("Select Supp_Name from supply", con.con); 
      con.Open(); 
      reader = cmd.ExecuteReader(); 
      table5.Load(reader); 
      foreach (DataRow row in table5.Rows) 
      { 
       SuppNameCombo.Items.Add(row["Supp_Name"]); 
      } 
     } 

     //add function 
     void addSection() 
     { 
      con.Close(); 
      cmd = new MySqlCommand("insert into deliver_assets(Del_AName, Del_ABrand, Del_AReceived, Del_AQty, Del_Asupplier) values('" + txtProdName.Text + "', '" + txtProdBrand.Text + "', '" + DTPReceived.Text + "', '" + txtQty.Text + "', '" + SuppNameCombo.Text + "')", con.con); 
      con.Open(); 
      reader = cmd.ExecuteReader(); 
     } 

     //update function 
     void updateSection() 
     { 
      con.Close(); 
      cmd = new MySqlCommand("update deliver_assets set Del_ASupplier ='" + SuppNameCombo.Text + "' and Del_AName ='" + txtProdName.Text + "' and Del_ABrand ='" + txtProdBrand.Text + "' and Del_AQty ='" + txtQty.Text + "' and Del_AReceived ='" + DTPReceived.Text + "' where Del_aID ='" + lblAssetIDChecker.Text + "'", con.con); 
      con.Open(); 
      reader = cmd.ExecuteReader(); 
     } 








    } 
} 

ответ

0

Ваш код содержит много ошибок, которых следует избегать при обработке задачи базы данных:

  • Использование глобальных переменных для одноразового использования объекта (в частности MySqlConnection)
  • Неиспользованные параметры
  • Неправильный синтаксис для оператора Update
  • Использование неправильных методов Execute вставки/обновления запросов
  • Попытка использовать сделай весь метод для установления соединения (связанной с первым)
  • Думая, что столбец с определенным типом данных будет счастливо принять строка в качестве значения

чтобы просто привести пример я попытаюсь переписать код Update

//update function 
    void updateSection() 
    { 
     string cmdText = @"update deliver_assets 
      set Del_ASupplier [email protected] 
       Del_AName = @name, 
       Del_ABrand = @brand 
       Del_AQty = @qty 
       Del_AReceived = @recv 
      where Del_aID = @id"; 
     using(MySqlConnection con = new MySqlConnection(.....)) 
     using(MySqlCommand cmd = new MySqlCommand(cmdText, con)) 
     { 
      cmd.Parameters.Add("@sup", MySqlDbType.VarChar).Value = SuppNameCombo.Text; 
      cmd.Parameters.Add("@name", MySqlDbType.VarChar).Value = txtProdName.Text; 
      cmd.Parameters.Add("@brand", MySqlDbType.VarChar).Value = txtProdBrand.Text; 
      cmd.Parameters.Add("@qty", MySqlDbType.VarChar).Value = Convert.ToDouble(txtQty.Text); 
      cmd.Parameters.Add("@recv", MySqlDbType.VarChar).Value = DTPReceived.Text; 
      cmd.Parameters.Add("@id", MySqlDbType.Int32).Value = Convert.ToInt32(lblAssetIDChecker.Text); 
      con.Open(); 
      int rowsUpdated = cmd.ExecuteNonQuery(); 
      if(rowUpdated > 0) 
       MessageBox.Show("Record updated"); 
     } 
    } 

Обратите внимание, что я не могу быть уверен в правильном типе данных ваших колонок. Вы должны создать параметр с совместимым с DataType для вашего столбца, изменив значения MySqlDbType, показанные в приведенном выше примере.

+0

При обновлении данных произошла ошибка. Ошибка: Host 'fe80 :: 9422: 2713: c11a: dc3e% 11' не разрешено подключаться к этому серверу MySQL. Что мне делать? –

+0

как насчет других запросов? Однако, лучше, если вы разместите новый вопрос – Steve

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