Результат команды SQL в словарь C # .NET 2.0 - PullRequest
15 голосов
/ 29 марта 2010

У меня есть простой запрос SQL (с использованием SqlCommand, SqlTransaction) в .NET 2.0, который возвращает таблицу пар целочисленных строк (ID, имя). Я хочу получить эти данные в словарь, как Dictionary<int, string>.

Я могу получить результат в DataTable, но даже перебирая его, я не уверен, как печатать и все такое. Я чувствую, что это должно быть распространенной проблемой, но я не нашел хороших решений.

Заранее спасибо.

Ответы [ 5 ]

15 голосов
/ 29 марта 2010

Вы можете попробовать подход, подобный этому, с учетом того, что вы в данный момент просматриваете свои результаты:

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

Метод SqlDataReader.GetInt32 и Метод SqlDataReader.GetString будет представлять индексы столбцов ID и Name соответственно.

11 голосов
/ 29 марта 2010

Вы можете вернуть его как DataReader и создать словарь, используя 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"]);
}
1 голос
/ 29 марта 2010

Вы можете сделать это так.

// 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 голосов
/ 29 марта 2010

я не набирал это в visual studio, поэтому вам может потребоваться внести незначительные изменения, чтобы он работал ...

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

попробуйте ... посмотрите, поможет ли это.

0 голосов
/ 29 марта 2010
    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"]);
}
...