将与foreach循环C#的多阵列
问题描述:
我创建一个web应用程序中,我需要在我darabase插入多个阵列,这是它是什么样子将与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)
,但是这是怎么它实际上是在我databas
(01-01-2013,105,500,2015)
(03-01-2013,105,500,2015)
插入它意味着只有tdate工作正常,但其他参数的值不更换和插入的第一个值而已,我需要做的,如果我想进入记录propely
答
您初始化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();
+0
仍然结果是相同的先生@chrisF –
http://stackoverflow.com/questions/3653462/is-存储分隔列表中的数据库列真的那坏/ 3653574 – e4c5