2014-09-29 35 views
-3

我要存儲在SQL Server數據庫表中的完整清單數據,但我不能這樣做...存儲在SQL Server的完整列表值在C#

for(int i=0;i<=mylist.Count;i++) 
{ 
    string sql2 = "INSERT INTO data (channel_value) VALUES (mylist[i])"; 
    SqlCommand abxb = new SqlCommand(sql2, conn); 
    abxb.ExecuteNonQuery(); 
} 
+0

毫不奇怪,因爲實際上並沒有將'mylist [i]'的值放入查詢字符串中。 – tnw 2014-09-29 16:15:11

+0

您試圖用您的代碼在表格中存儲字符串「mylist [i]」。你需要打破你的字符串。 ''INSERT INTO data(channel_value)VALUES(「+ mylist [i] +」)「'(< - 只是一個粗略的建議,可能需要更多的引號) – Grice 2014-09-29 16:15:51

+0

另外,將你的for循環的條件改爲'i 2014-09-29 16:17:11

回答

4

你不可錯過mylist[i]到您的SQL這樣的字符串。一個參數添加到您的SqlCommand,並在一個循環中設置的值,就像這樣:

var cmd = new SqlCommand("INSERT INTO data (channel_value) VALUES (@val)", conn); 
cmd.Parameters.Add("@val", SqlDbType.Int); // Pick the correct type here 
foreach (var v in mylist) { 
    cmd.Parameters["@val"].Value = v; 
    cmd.ExecuteNonQuery(); 
} 

有幾件事情需要注意:

  • 在我的SQL字符串我取代mylist[i]與命名參數@val
  • 在循環中,我設置@val的值mylist,並調用cmd.ExecuteNonQuery()
  • 我用foreach代替for,因爲循環內部不需要索引,並且因爲您使用<=而不是<作爲列表索引上的條件。
+0

+1只有**明智的方法來做到這一點 - 優秀的職位 – 2014-09-29 16:27:22

+0

更好的辦法是創建一個帶有表值參數的proc,並且一次傳遞整個集合,而不是一遍又一遍地打sql。 – 2014-09-29 16:28:14