2016-12-15 76 views
0

我創建一個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

回答

2

您初始化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 –