2010-03-29 18 views
13

Tengo una consulta SQL simple (usando SqlCommand, SqlTransaction) en .NET 2.0 que devuelve una tabla de pares de cadenas enteras (ID, Nombre). Quiero obtener estos datos en un diccionario como Dictionary<int, string>.Resultado del comando SQL al diccionario C# .NET 2.0

Puedo obtener el resultado en una DataTable, pero incluso iterando sobre ella, no estoy seguro de cómo hacer la escritura y todo eso. Siento que este debe ser un problema común, pero no he encontrado ninguna buena solución.

Gracias de antemano.

+0

Gracias para la edición. Totalmente destinado a poner los tipos ... diccionario como diccionario, lol. – Joel

Respuesta

13

Usted podría intentar un enfoque similar a este, sin embargo ajustado para que estés actualmente bucle sobre sus resultados:

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 

El SqlDataReader.GetInt32 method y SqlDataReader.GetString method representaría los índices de columna ID y Name, respectivamente.

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

Puede hacer de esta manera.

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

yo no escribo esto en el estudio visual de lo que es posible que tenga que hacer cambios menores para hacerlo correr ...

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

intentar que ... a ver si eso ayuda.

11

lo puede devolver como un DataReader, y construir el diccionario utilizando 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"]); 
} 
Cuestiones relacionadas