Сохранение результата запроса в словаре - PullRequest
2 голосов
/ 21 декабря 2011

У меня проблема с разработкой приложения для Windows Mobile на C #, я пытаюсь работать с 3 запросами.Я хочу собрать все результаты запроса в словарь.

Могу ли я собрать его без зацикливания?

как мой код:

string query= "select distinct nameProduct, price from product";
SqlCeCommand cmd = new SqlCeCommand(sql, dbConn);
Dictionary production = new Dictionary<string, int>();

Как я могу установить это производство измой запрос, потому что у меня есть 3 запроса, как это в одном процессе, и данные более 10.000.

@ Джон Сондерс: когда я пытаюсь это сделать, я получаю ошибку "{" Нет данных для строки / столбца. "}", Но на самом деле, когда я пытаюсь выполнить запрос на сервере sql, он все еще работает нормально.ошибка в строке: production [(string) reader ["nameProduct"]] = (int) reader ["price"];

@ Johnny: к сожалению, этот проект построен в VS2005 и не поддерживает union и joinутверждение.

Ответы [ 4 ]

4 голосов
/ 21 декабря 2011
Dictionary production = new Dictionary<string, int>();
string query= "select distinct nameProduct, price from product";
using (SqlCeCommand cmd = new SqlCeCommand(sql, dbConn))
{
    using (var reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            production[(string)reader["nameProduct"]] = (int)reader["price"];
        }
    }
}

без петли. Обратите внимание, я не пробовал:

production =
    reader.Cast<IDataRecord>()
          .ToDictionary(
              record => (string)record["nameProduct"], 
              record => (int)record["price"]);
2 голосов
/ 16 мая 2015

Это простой способ получить данные из базы данных и сохранить данные в словаре

Dictionary<int, string>emp = new Dictionary<int, string>();
OleDbCommand cmd = new OleDbCommand("select empId,Name from Employee where ORDER BY empId DESC", con);
OleDbDataReader dr = cmd.ExecuteReader();

if (dr.HasRows)
{
    while (dr.Read())
    {
         emp.Add(Convert.ToInt32(dr["empId"]), dr["Name"].ToString());                
    }                    
}

foreach (KeyValuePair<int, string> em in emp)
{
    Console.WriteLine(em.Key.ToString() + " = " + em.Value);
}
1 голос
/ 21 декабря 2011

Вы можете преобразовать результат DataTable (используйте метод DataAdapter.Fill для заполнения DataTable) в Dictionay.

string query= "select distinct nameProduct, price from product";
SqlCeConnection conn = new SqlCeConnection("Data Source = your file.sdf");

SqlCeCommand selectCmd = conn.CreateCommand();
selectCmd.CommandText = query;

SqlCeDataAdapter adp = new SqlCeDataAdapter(selectCmd);
DataTable dt=new DataTable();
adp.Fill(dt);

Dictionary<string, int> result = (from row in dt.AsEnumerable()
                          select new KeyValuePair<string, int>
                          (row.Field<string>("nameProduct"), row.Field<int>("price")))
                          .ToDictionary(p=>p.Key,p=>p.Value);

 foreach (var t in result)
  {
    Console.WriteLine(t.Key + " " + t.Value);
  }
0 голосов
/ 21 декабря 2011

Несколько баллов.

1. Я думаю, что вы можете использовать "union all" в вашем запросе. 2.Если у вас более 10000 строк записей, особенно на мобильном устройстве, я предлагаю вам загрузить только те данные, которые вам нужны, и вы можете отображать их на одном экране вместо чтения всех.

...