Мне нужно получить информацию, хранящуюся в базе данных из тысячи элементов. Если я один за другим таким образом, это занимает большое количество времени (ТАС является 8-символьная строка):Не удается получить данные с помощью ExecuteReader() при группировке запросов
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DataBase\IMEIDB.accdb";
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
connection.Open();
using (OleDbCommand command = connection.CreateCommand())
{
OleDbDataReader reader;
command.CommandText = "SELECT TAC, Name, Model, Year, Manufacturer, LTE FROM Terminales WHERE TAC = @tac";
command.Parameters.AddWithValue("@tac", tac);
reader = command.ExecuteReader();
while (reader.Read())
{
ulong tac = Convert.ToUInt64(reader.GetString(0));
if (this.DiccionarioTerminales.ContainsKey(tac))
{
DiccionarioTerminales[tac].inDB = true;
DiccionarioTerminales[tac].Name = reader.GetValue(1).ToString();
DiccionarioTerminales[tac].Manufacturer = reader.GetValue(2).ToString();
DiccionarioTerminales[tac].Model = reader.GetValue(3).ToString();
DiccionarioTerminales[tac].Year = reader.GetValue(4).ToString();
DiccionarioTerminales[tac].LTE = reader.GetValue(5).ToString();
}
}
command.Dispose();
}
connection.Dispose();
}
Он хорошо работает (я знаю, что я должен использовать ExecuteNonQuery()
если это только одна запись, но этот пример только тест), но если я пытаюсь группы ТАС 10 по 10 (в настоящее время нолики является строкой, как 'xxxxxxxx','xxxxxxxx','xxxxxxxx','xxxxxxxx'...
) со следующими изменениями в моем коде ...
OleDbDataReader reader;
command.CommandText = "SELECT TAC, Name, Model, Year, Manufacturer, LTE FROM Terminales WHERE TAC IN (@tac)";
command.Parameters.AddWithValue("@tac", tac);
это не входит в цикле while
, и я не знаю, почему ...
Есть ли что-то что мне не хватает или, возможно, мне нужно использовать другой метод для извлечения этих данных?
EDIT: Изменение формата благодаря Soner Gönül ответа
Я думаю, что вы имеете в виду '' ExecuteScalar' не ExecuteNonQuery' :) –
Каких данных нолики? Integer? Строка? – PeterRing
Какое значение передается в параметре 'tac'? Кстати - как это должно сгруппировать что-нибудь? Он используется только в состоянии 'where' вашего запроса. –