2016-05-26 121 views
2

我目前正在學習如何使用數據庫連接以及如何讀取和寫入數據。我正在爲Visual Studio使用Mysql數據/連接器6.1。這支持訪問本地主機mysql服務器。C#列表<string>列表中<string> [] .toList()

我想顯示記錄在我使用這個代碼的人的個人信息:

string query = "SELECT * FROM gebruiker WHERE id='" + id + "'"; 

List<string>[] list = new List<string>[5]; 
list[0] = new List<string>(); 
list[1] = new List<string>(); 
list[2] = new List<string>(); 
list[3] = new List<string>(); 
list[4] = new List<string>(); 


if (this.openConnection() == true) 
{ 

    MySqlCommand cmd = new MySqlCommand(query, connection); 
    //Een nieuw datareader object maken en dan query uitvoeren 
    MySqlDataReader dataReader = cmd.ExecuteReader(); 


    while (dataReader.Read()) 
    { 
     list[0].Add(dataReader["id"].ToString()); 
     list[1].Add(dataReader["voornaam"].ToString()); 
     list[2].Add(dataReader["achternaam"].ToString()); 
     list[3].Add(dataReader["geboortedatum"].ToString()); 
     list[4].Add(dataReader["Rol_id"].ToString()); 
    } 

    dataReader.Close(); 

    this.closeConnection(); 

    return list; 
} 

我使用列表,因爲我下面這個教程:tutorial

然後當我返回列表我想獲得這些數據並將其添加到我的winform上的標籤。這是我使用的代碼:

DBconnect connectDB = new DBconnect(); 
List<string>[] persGegevens = connectDB.persoonlijkeGegevens(userId); 
for (int i = 0; i <= persGegevens.Count(); i++) 
{ 
    switch (i) 
    { 
     case 0: 
      break; 
     case 1: 
      lblVoornaamVrbl.Text = persGegevens[i].ToString(); 
      break; 
     case 2: 
      lblAchternaamVrbl.Text = persGegevens[i].ToString(); 
      break; 
     case 3: 
      lblGbrtedatumVrbl.Text = persGegevens[i].ToString(); 
      break; 
     case 4: 
      lblFuntieVrbl.Text = persGegevens[i].ToString(); 
      break; 
     default: 
      break; 
    } 
} 

但不幸的代碼不會將數據轉換成列表的toString但該元素將得到轉換的toString。這就是我得到的:system.collections.generic.list`1 [system.string] 我也試圖用foreach做到這一點,但沒有奏效,因爲我無法指定哪個元素必須放置在哪個標籤中。

你們知道這裏有什麼問題嗎?這是檢索數據的正確方法嗎?或者我應該使用別的東西來存儲我的數據?

+0

使用數據表來使你的代碼更容易http://stackoverflow.com/questions/11993211/how-to-fill-datatable-with-sql-table –

+1

@MurrayFoxcroft決不工作在這樣的事情上使用DataTable使事情變得更容易,以我的經驗 – Jonesopolis

+0

我會建議尋找使用實體框架和Linq它可能會讓事情變得更容易理解。 –

回答

2

我覺得nik0lias建議是以前正確的,但也許它可以運行根據需要,如果改爲:

case 1: 
     lblVoornaamVrbl.Text = persGegevens[i][ 0 ].ToString(); 
     break; 
    case 2: 
     lblAchternaamVrbl.Text = persGegevens[i][ 0 ].ToString(); 
     break; 
    case 3: 
     lblGbrtedatumVrbl.Text = persGegevens[i][ 0 ].ToString(); 
     break; 
    case 4: 
     lblFuntieVrbl.Text = persGegevens[i][ 0 ].ToString(); 

如果我是正確的,或者考慮一下,如果一個列表數組列表<需要> []你可以用列表簡化你的代碼是這樣的:

string query = "SELECT * FROM gebruiker WHERE id='" + id + "'"; 

    List<string> listGebruiker = new List<string>(); 


    if (this.openConnection() == true) 
    { 
     MySqlCommand cmd = new MySqlCommand(query, connection); 
     //Een nieuw datareader object maken en dan query uitvoeren 
     MySqlDataReader dataReader = cmd.ExecuteReader(); 


     while (dataReader.Read()) 
     { 
      listGebruiker.Add(dataReader["id"].ToString()); 
      listGebruiker.Add(dataReader["voornaam"].ToString()); 
      listGebruiker.Add(dataReader["achternaam"].ToString()); 
      listGebruiker.Add(dataReader["geboortedatum"].ToString()); 
      listGebruiker.Add(dataReader["Rol_id"].ToString()); 
     } 

     dataReader.Close(); 

     this.closeConnection(); 

     return list; 
    } 

DBconnect connectDB = new DBconnect(); 
    List<string> persGegevens = connectDB.persoonlijkeGegevens(userId); 

    lblVoornaamVrbl.Text = persGegevens[1]; 
    lblAchternaamVrbl.Text = persGegevens[2]; 
    lblGbrtedatumVrbl.Text = persGegevens[3]; 
    lblFuntieVrbl.Text = persGegevens[4]; 

希望這有助於

+0

它可能確實是一個更好的解決方案,不使用列表<>數組而是使用列表。我沒有想到,因爲我正在學習一個教程。謝謝。 –

1

persGegevens[i]List<string>類型,所以persGegevens[i].ToString()不會給任何有意義的東西。你需要的東西,如:

persGegevens[i][j]; 
2

您試圖名單上做了ToString(),因此輸出。您需要指定要顯示的陣列或列表中的哪個位置,然後執行ToString()。下面的工作或者你可以使用另一個變量來循環每個用戶來獲取他們的細節。

DBconnect connectDB = new DBconnect(); 
    List<string>[] persGegevens = connectDB.persoonlijkeGegevens(userId); 
    for (int i = 0; i <= persGegevens.Count(); i++) 
    { 
     switch (i) 
     { 
      case 0: 
       break; 
      case 1: 
       lblVoornaamVrbl.Text = persGegevens[i][0].ToString(); 
       break; 
      case 2: 
       lblAchternaamVrbl.Text = persGegevens[i][1].ToString(); 
       break; 
      case 3: 
       lblGbrtedatumVrbl.Text = persGegevens[i][2].ToString(); 
       break; 
      case 4: 
       lblFuntieVrbl.Text = persGegevens[i][3].ToString(); 
       break; 
      default: 
       break; 
     } 
    } 
+0

這確實有效,我使用PersGegevens [i] [0],因爲列表 []上的每個列表只有1個元素。謝謝您的幫助。 –