Не удается запросить данные из файла access

#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. Это странно. Я просто пытаюсь перезагрузить систему, и проблема исчезает. Я до сих пор понятия не имею, что с этим происходит.