2015-09-30 2 views
-1

Я пытаюсь добавить данные в свою основную/подробную таблицу с помощью хранимой процедуры.Вставьте данные в основные таблицы подробностей с помощью хранимой процедуры

Я попытался это:

private void ekle() 
{ 
    MySqlCommand cmd = new MySqlCommand("invinputfrompo", bag); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add("?trnotes", MySqlDbType.Text).Value = tb1.Text; 
    for (int i = 0; i <= dg1.Rows.Count - 1; i++) 
    { 
     if (Convert.ToBoolean(dg1.Rows[i].Cells[0].Value) == true) 
     { 

      cmd.Parameters.Add("?docno", MySqlDbType.VarChar).Value = dg1.Rows[i].Cells[9].Value.ToString(); 
      cmd.Parameters.Add("?idpodetails", MySqlDbType.Int32).Value = Convert.ToInt32(dg1.Rows[i].Cells[5].Value.ToString()); 
      cmd.Parameters.Add("?idmat", MySqlDbType.Int32).Value = Convert.ToInt32(dg1.Rows[i].Cells[6].Value.ToString()); 
      cmd.Parameters.Add("?sn", MySqlDbType.VarChar).Value = dg1.Rows[i].Cells[2].Value; 
      cmd.Parameters.Add("?qty", MySqlDbType.Decimal).Value = Convert.ToDecimal(dg1.Rows[i].Cells[1].Value); 
      //if (dg1.CurrentRow.Cells[4].Value.ToString() == "") { cmd.Parameters.Add("?shelflife", MySqlDbType.Date).Value = DBNull.Value; } 
      //else { cmd.Parameters.Add("?shelflife", MySqlDbType.Date).Value = dg1.CurrentRow.Cells[4].Value.ToString(); } 
      cmd.Parameters.Add("?shelflife", MySqlDbType.VarChar).Value = dg1.Rows[i].Cells[4].Value; 
     } 
    } 
    cmd.Connection = bag; 
    cmd.ExecuteNonQuery(); 
} 

только первый параметр «trnotes» будет добавлен к основной таблице, другие параметры будут добавлены к таблице подробно.

Я сделал петлю как это, но путь не увенчался успехом. в нем говорится, что вы уже определили «docno» (первый параметр в таблице)

Помогла бы вам в этом отношении?

ответ

0

Когда оператор if выполняется во второй раз, он пытается добавить docno в список параметров, созданных на первой итерации. Поскольку в этой первой итерации было добавлено docno, оно уже существует.

Есть несколько способов, которыми вы могли бы обойти это:

  • Выполнение хранимой процедуры для каждой строки. Недостатком является то, что у вас есть накладные расходы на дополнительные вызовы БД.
  • Использование User-Defined Table Types. Вы создадите таблицу в C# , а затем передадите это значение в качестве хранимой процедуры в значение вставьте в таблицу.