Вставка нескольких массивов с циклом foreach C#

Я создаю веб-приложение, в котором мне нужно вставить несколько массивов в мою базу данных, вот как это выглядит

List<string> td = tdate.Split(',').ToList();
//List<string> ps = particular.Split(',').ToList();
int i = 0;
foreach (string t in td)
foreach (string p in ps)
     {
       SqlCommand cmd = new SqlCommand("insert into finalinstructoreexpense(sonvinid,particulars,amount,totalamt,date,utno,paymentid,paymode,issuedate,sondate,trainer,type,bank_id) values(@sonvinid,@particulars,@amount,@totalamt,@date,@utno,@paymentid,@paymode,@issuedate,@sondate,@trainer,@type,@bank_id)", con);
       con.Open();
       cmd.Parameters.Add("@sonvinid", SqlDbType.Int).Value =Convert.ToInt32(id);
       cmd.Parameters.Add("@particulars", SqlDbType.NVarChar).Value = p;
       cmd.Parameters.Add("@amount",SqlDbType.Float).Value=adjamt.Split(',')[i];
       cmd.Parameters.Add("@totalamt", SqlDbType.NVarChar).Value = total;
       cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = date.Split(',')[i];
       cmd.Parameters.Add("@utno", SqlDbType.NVarChar).Value = utrno;
       cmd.Parameters.Add("@paymentid",SqlDbType.NVarChar).Value=paymentid;
       cmd.Parameters.Add("@paymode", SqlDbType.NVarChar).Value = modeofpayment;
       cmd.Parameters.Add("@issuedate", SqlDbType.DateTime).Value = transferdate;
       cmd.Parameters.Add("@sondate", SqlDbType.DateTime).Value = t;
       cmd.Parameters.Add("@trainer", SqlDbType.NVarChar).Value = trainer;
       cmd.Parameters.Add("@type", SqlDbType.NVarChar).Value = typeofadj;
       cmd.Parameters.Add("@bank_id", SqlDbType.Int).Value = Convert.ToInt32(bnkid);
       cmd.ExecuteNonQuery();
       message = "Adjusted Amount Inserted Successfully";
       con.Close();
     }

эта проблема у меня есть 4 массива в виде строки i.e tdate,particular,adjamt,date и параметры выглядят как

tdate(01-01-2013,03-01-2013)
particular(105,100)
adjamt(500,650)
date(2015,2016)

и вот как я хочу внести записи в базу данных

(01-01-2013,105,500,2015)
(03-01-2013,100,650,2016)

но это то, как он на самом деле вставляет в мои базы данных

(01-01-2013,105,500,2015)
(03-01-2013,105,500,2015)

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

1 ответ

Решение

Вы инициализируете i в ноль:

int i = 0;

но не увеличивая его в вашем цикле. Итак, эти строки:

   cmd.Parameters.Add("@amount",SqlDbType.Float).Value=adjamt.Split(',')[i];
   cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = date.Split(',')[i];

всегда возвращают первый элемент массива.

Добавлять:

i = i++;

до конца вашего цикла.

Вы действительно должны разделить adjamt а также date в списки перед циклом и использовать эти списки внутри цикла.

Вы также перебираете оба td а также ps, Это добавит в таблицу вдвое больше строк, чем вы хотите. Снимите внутреннюю петлю и замените:

   cmd.Parameters.Add("@particulars", SqlDbType.NVarChar).Value = p;

от

   cmd.Parameters.Add("@particulars", SqlDbType.NVarChar).Value = ps[i];

где ps создается вне вашего цикла:

var ps = particular.Split(',').ToList();
Другие вопросы по тегам