2017-02-22 78 views
-1

我想在列表中創建一個列表,將數據放入MYSQL中... 我很接近,但它似乎不能正常工作...在列表中創建一個列表,並將數據存入MYSQL

當我MessageBox.Show(list_line[0][3].ToString()); 它給了我System.IndexOutOfRangeException但在技術上,我想要什麼,並認爲這樣做是:

list_DB[ [list_line1] , [List_line2] , [list_line3] , ... ] 

和list_line看起來像[1, 22/02/2017 13:48:01, 50.0000, 004.0000]

這是我本功能離子...

private List<string> list_line = new List<string>(); 
    private List<List<string>> list_DB = new List<List<string>>(); 
    private void BoatGPS_INTO_LIST() 
    { 
     SqlDataReader reader; 
     string query = "select boat_id, boatGPS_DateTime, boatGPS_lat, boatGPS_lon from BoatGPS"; 

     using (SqlConnection sql = new SqlConnection("Data Source = (LocalDB)\\MSSQLLocalDB; AttachDbFilename = \"" + Environment.CurrentDirectory + "\\DB\\STS.mdf\"; Integrated Security = True; Connect Timeout = 30")) 
     { 
      sql.Open(); 
      using (reader = new SqlCommand(query, sql).ExecuteReader()) 
      { 
       if (reader.HasRows) 
       { 
        while (reader.Read()) 
        { 
         Object[] line = new Object[reader.FieldCount]; 
         reader.GetValues(line);        
         foreach (var item in line) 
         { 
          list_line.Add(item.ToString()); 
         } 
         list_DB.Add(list_line); 
        } 
       } 
      } 
      MessageBox.Show(list_line[0][3].ToString()); 
      sql.Close(); 
     } 
    } 
+0

那麼當我打印: \ n MessageBox.Show(list_DB [0] [1]的ToString()); MessageBox.Show(list_DB [1] [1] .ToString()); MessageBox.Show(list_DB [2] [1] .ToString()); –

+0

你能解釋爲什麼DataTable不適合你嗎? – Steve

+0

... Heu ...其實它dosn't工作尚未... Ahahah 那麼當我打印: MessageBox.Show(list_DB [0] [1] .ToString()); MessageBox.Show(list_DB [1] [1] .ToString()); list_DB [[list_line],[List_line],[list_line],...] 和所有的[List_line]是一樣的:( MessageBox.Show(list_DB [2] [1] .ToString()); 我得到了相同的答案,所以現在我有 –

回答

0

list_DB的類型是List<List<string>>。嘗試:

MessageBox.Show(list_DB[0][3].ToString()); 

編輯: 關於如何填寫清單list_DB,請嘗試:

while (reader.Read()) 
{ 
    List<string> list_line = new List<string>();       
    list_line.Add(reader[0].ToString()); 
    list_line.Add(reader[1].ToString()); 
    list_line.Add(reader[2].ToString()); 
    list_line.Add(reader[3].ToString()); 

    list_DB.Add(list_line); 
} 
+0

Thx for your reply ...我在評論中更正了它......但我仍然有一個問題,因爲我得到了同樣的答案,就像我列出的list_DB [list_line],[List_line],[list_line],...]一樣,每個list_line中都有相同的值 –

+0

@dimitriverdonck請參閱我的編輯 – apomene

+0

非常感謝!!!它的作品!它是一個很容易的代碼...再次! –

0

此代碼

MessageBox.Show(list_line[0][3].ToString()); 

試圖訪問的拳頭項目(串)在list_line對象(List<string>)中,然後character與該字符串中的索引3,這將拋出excep如果字符串短於4個字符

0

你很複雜的東西。不需要這樣的結構。
有一個特定的類在內存中表示SELECT查詢的結果,它是DataTable類。

private DataTable dt = new DataTable(); 
private void BoatGPS_INTO_LIST() 
{ 
    SqlDataReader reader; 
    string query = "select boat_id, boatGPS_DateTime, boatGPS_lat, boatGPS_lon from BoatGPS"; 

    using (SqlConnection sql = new SqlConnection("Data Source = (LocalDB)\\MSSQLLocalDB; AttachDbFilename = \"" + Environment.CurrentDirectory + "\\DB\\STS.mdf\"; Integrated Security = True; Connect Timeout = 30")) 
    { 
     sql.Open(); 
     using (reader = new SqlCommand(query, sql).ExecuteReader()) 
      dt.Load(reader); 

     if(dt.Rows.Count > 0) 
      // Here the syntax means: First row, fourth column 
      MessageBox.Show(dt.Rows[0][3].ToString()); 
     else 
      MessageBox.Show("Table is empty"); 


    } 
} 
+0

Thx爲您的答覆!我正在研究你的代碼...... @apomene也發佈了一個很棒的示例! –

+0

如果你沒有一個非常有說服力的理由來做這件事,那麼你真的是在浪費資源。您是否擁有DataTable的實例後,是否查看過所有可用的功能?列表真的不適合這種工作。 – Steve

相關問題