2016-01-23 6 views
0

Я пытаюсь вставить данные в моей БД, и когда я нажимаю на кнопку она должна получить сделано, но это не будетя не могу вставить данные в моей БД

Я предполагаю, что это из моего последнего слоя где-то в моем запросе

вот мой код

public void InsertInventory(DateTime _date, int _customer_Id, 
          int _employee_Id, List<int> _product_Id, 
          List<int> _amountSold, 
          List<int> _unitPrice, List<int> _totalPrice) 
    { 
     Connection_String = @"Data Source=MOSTAFA-PC;Initial Catalog=" 
          + "Sales and Inventory System" 
          + ";Integrated Security=TrueData Source=MOSTAFA-PC;Initial Catalog=" 
          + "Sales and Inventory System" 
          + ";Integrated Security=True;"; 

     Query = "insert into Inventory" + 
        "(Customer_Id,Employee_Id,Product_Id,[Date],[Amount Sold],[Unit Price],[Total Price])" + 
        "values (@customer_id,@Employee_id,@Product_id,@[Date],@[Amount_Sold],@[Unit_Price],@[Total_Price])"; 

     using (Con = new SqlConnection(Connection_String)) 
     using (Cmd = new SqlCommand(Query, Con)) 
     { 
      Cmd.Parameters.Add("@customer_id", SqlDbType.Int); 
      Cmd.Parameters.Add("@Employee_id", SqlDbType.Int); 
      Cmd.Parameters.Add("@Product_id", SqlDbType.Int); 
      Cmd.Parameters.Add("@[Date]", SqlDbType.NVarChar); 
      //Cmd.Parameters.Add("@[Date]", SqlDbType.Date); 
      Cmd.Parameters.Add("@[Amount_sold]", SqlDbType.Int); 
      Cmd.Parameters.Add("@[Unit_Price]", SqlDbType.Decimal); 
      Cmd.Parameters.Add("@Total_Price", SqlDbType.Decimal); 

      Cmd.Connection = Con; 
      Con.Open(); 

      int RecordToAdd = _product_Id.Count; 
      for (int i = 0; i < RecordToAdd; i++) 
      { 
       Cmd.Parameters["@customer_id"].Value = _customer_Id; 
       Cmd.Parameters["@Employee_id"].Value = _employee_Id; 
       Cmd.Parameters["@Product_id"].Value = _product_Id; 
       Cmd.Parameters["@Date"].Value = _date; 
       Cmd.Parameters["@Amount_sold"].Value = _amountSold; 
       Cmd.Parameters["@Unit_Price"].Value = _unitPrice; 
       Cmd.Parameters["@Total_Price"].Value = _totalPrice; 
       Cmd.ExecuteNonQuery(); 
      } 
     } 

    } 

Я не могу понять, где моя проблема

+0

вашей проблема в том, у вас есть не обработки ошибок нет – amdixon

+0

Добавить _INT запись = Cmd.ExecuteNonQuery(); _, а затем использовать MessageBox для показать переменную записей. Он должен быть 1, если запись была вставлена ​​или ноль, если нет. Кроме того, этот текст строки соединения дублируется. Это просто опечатка? – Steve

+1

Кстати, вы отметили это с помощью MySql TAG, но это похоже на базу данных SQL Server из строки подключения и из-за использования специальных классов Sql-сервера, таких как SqlConnection и т. Д. ... что такое правильная база данных? – Steve

ответ

0

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

// These doesn't change inside the loop, so set it once for all... 
Cmd.Parameters["@customer_id"].Value = _customer_Id; 
Cmd.Parameters["@Employee_id"].Value = _employee_Id; 
Cmd.Parameters["@Date"].Value = _date; 

for (int i = 0; i < RecordToAdd; i++) 
{ 
    Cmd.Parameters["@Product_id"].Value = _product_Id[i]; 
    Cmd.Parameters["@Amount_sold"].Value = _amountSold[i]; 
    Cmd.Parameters["@Unit_Price"].Value = _unitPrice[i]; 
    Cmd.Parameters["@Total_Price"].Value = _totalPrice[i]; 
    Cmd.ExecuteNonQuery(); 
} 
Смежные вопросы