2010-03-29 4 views
13

J'ai une requête SQL simple (en utilisant SqlCommand, SqlTransaction) dans .NET 2.0 qui renvoie une table de paires de chaînes entières (ID, Name). Je veux obtenir ces données dans un dictionnaire comme Dictionary<int, string>.Résultat de la commande SQL au dictionnaire C# .NET 2.0

Je peux obtenir le résultat dans un DataTable, mais même en itérant par dessus, je ne suis pas sûr de savoir comment faire la dactylographie et tout ça. J'ai l'impression que cela doit être un problème commun, mais je n'ai pas trouvé de bonnes solutions.

Merci d'avance.

+0

Merci pour l'édition. Totalement destiné à mettre les types ... dictionnaire comme dictionnaire, lol. – Joel

Répondre

13

Vous pouvez essayer une approche similaire à celle, ajustée à cependant que nous parcourons actuellement sur vos résultats:

Dictionary<int, string> dictionary = new Dictionary<int, string>(); 
using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 

    using (SqlCommand command = new SqlCommand(queryString, connection)) 
    { 
     using (SqlDataReader reader = command.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       dictionary.Add(reader.GetInt32(0), reader.GetString(1)); 
      } 
     } 
    } 
} 

// do something with dictionary 

Le SqlDataReader.GetInt32 method et SqlDataReader.GetString method représenterait les ID et Name indices de colonne, respectivement.

0
IDictionary<int, string> dict = new Dictionary<int, string>(); 
    DataTable mydata = new DataTable("hey"); 

    foreach (DataRow item in mydata.Rows) 
{ 
    dict.Add(item["id"], item["name"]); 
} 
1

Vous pouvez faire comme ça.

// Define your Dictionary 
IDictionary<int,string> dictionary = new Dictionary<int,string>(); 

// Read your dataTable 
foreach(DataRow row in dataTable.Rows) {  
     // Add Id and Name respectively 
     dictionary.Add(int.parse(row[0].ToString()),row[1].ToString())   
} 
0

je ne l'ai pas tapez dans cette visual studio afin que vous pourriez avoir besoin d'apporter des modifications mineures pour le faire fonctionner ...

Dictionary(int key,string value) dictionary = new Dictionary<int key,string value>(); 

foreach(DataRow row in DataTable.Rows) 
{ 
    //null check?? 
    dictionary.add(Convert.toInt(row[0]),row[1].toString()); 
} 

essayer que ... voir si cela aide.

11

Vous pouvez le retourner comme un DataReader, et construire le dictionnaire LINQ:

Dictionary<int, string> dictionary; 
using (SqlCommand command = new SqlCommand(queryString, connection)) 
using (SqlDataReader reader = command.ExecuteReader()) { 
    dictionary = reader.Cast<DbDataRecord>() 
         .ToDictionary(row => (int)row["id"], row => (string)row["name"]); 
}