将与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

+0

http://stackoverflow.com/questions/3653462/is-存储分隔列表中的数据库列真的那坏/ 3653574 – e4c5

您初始化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(); 
+0

仍然结果是相同的先生@chrisF –