2016-05-26 68 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个元素。谢谢您的帮助。 –