2010-03-29 7 views
13

Ich habe eine einfache SQL-Abfrage (mit SqlCommand, SqlTransaction) in .NET 2.0, die eine Tabelle von Integer-String-Paaren (ID, Name) zurückgibt. Ich möchte diese Daten in ein Wörterbuch wie Dictionary<int, string> bekommen.SQL-Befehl Ergebnis zu Dictionary C# .NET 2.0

Ich kann das Ergebnis in eine DataTable bekommen, aber sogar darüber iterieren, ich bin mir nicht sicher, wie man die Eingabe und all das Zeug macht. Ich denke, das muss ein häufiges Problem sein, aber ich habe keine guten Lösungen gefunden.

Vielen Dank im Voraus.

+0

Danke für die Bearbeitung. Totally beabsichtigt, die Arten ... Wörterbuch wie Wörterbuch, lol zu setzen. – Joel

Antwort

13

Sie könnten einen ähnlichen Ansatz wie diese versuchen, angepasst aber Sie gerade über Ihre Ergebnisse Looping:

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 

Die SqlDataReader.GetInt32 method und SqlDataReader.GetString method würde die ID und Name Spaltenindizes darstellen.

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

Sie können so tun.

// 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

Ich habe das nicht in Visual Studio geben, so dass Sie kleinere Änderungen vornehmen könnten müssen, um es läuft ...

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()); 
} 

versuchen, dass ... sehen, ob das hilft.

11

Sie können es als Datareader zurückkehren, und das Wörterbuch mit Linq konstruieren:

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"]); 
}