【问题标题】:inserting multiple record using foreach loop c#使用foreach循环插入多条记录C#
【发布时间】:2016-12-15 11:25:19
【问题描述】:

我正在创建一个网络应用程序,我需要在我的数据库中插入多条记录,这就是它的外观

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 工作正常,但其他参数的值没有改变,只插入第一个值,如果我想正确输入记录,我需要做什么

【问题讨论】:

标签: c# arrays sql-server loops foreach


【解决方案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++;

到你的循环结束。

您确实应该在循环之前将adjamtdate 拆分为列表,并在循环中使用这些列表。

您还循环遍历tdps。这将在您的表中添加两倍的行数。去掉内循环并替换:

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

通过

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

ps 在循环之外创建:

var ps = particular.Split(',').ToList();

【讨论】:

    猜你喜欢
    • 2016-02-29
    • 1970-01-01
    • 2017-10-05
    • 2013-04-19
    • 2013-02-03
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多