#c# #sql #ms-access
#c# #sql #ms-access
Вопрос:
Я пытаюсь запросить данные из файла access, но он всегда ничего не возвращает. Я уже скопировал строку запроса и запрашиваю напрямую в Microsoft Access, она возвращает значение просто отлично. Вот мой исходный код, пожалуйста, взгляните.
public DataTable queryDB(string querystr) {
DataTable res;
string conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:test.mdb;Persist Security Info=False;";
OleDbConnection con = new OleDbConnection(conStr);
con.Open();
OleDbCommand cmd = new OleDbCommand(querystr, con);
OleDbDataReader reader = cmd.ExecuteReader();
if (reader.Read()) {
res = new DataTable();
res.Load(reader);
}
else
res = null;
reader.Close();
con.Close();
return res;
}
Запрос — это просто «ВЫБРАТЬ * ИЗ USERINFO;». Я уже потратил на это 2 часа, пожалуйста, кто-нибудь, дайте мне несколько подсказок.
Комментарии:
1. Не вызывайте reader.Read()
Ответ №1:
Другой подход для получения данных:
public DataTable queryDB(string querystr) {
DataTable res = new DataTable();
string conStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:test.mdb;Persist Security Info=False;";
OleDbConnection con = new OleDbConnection(conStr);
con.Open();
OleDbDataAdapter= new OleDbDataAdapter(querystr, con);
oDataAdapter.Fill(res);
oDataAdapter.Dispose();
con.Close();
return res;
}
Ответ №2:
Это в Windows 8? Я видел странное поведение, когда запрос к базе данных Access возвращает только некоторые записи, которые он должен. Для нас это возвращало только 34 или около того записи из тысяч.
У него нет других ошибок?
Если в нем нет других ошибок и его нет в Windows 8, я бы сказал, что ответ кроется в строке подключения.
Комментарии:
1. Это странно. Я просто пытаюсь перезагрузить систему, и проблема исчезает. Я до сих пор понятия не имею, что с этим происходит.