Проблемы, обращающиеся к базе данных Access '07 в C # - PullRequest
3 голосов
/ 28 марта 2012

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

Я делаю довольно простое и универсальное приложение на основе базы данных. Я использую C # и обращаюсь к базе данных Microsoft Access 2007.

Я поместил вещи с базой данных в свой собственный класс с методами, просто выделяющими OleDbDataAdapters, которые я использую для фиксации. Я передаю любые методы, которые предварительно запрашивают объект DataSet из основной программы, где я храню данные (несколько таблиц в БД).

Я создал очень общий частный метод, который я использую для выполнения запросов SQL SELECT, и у меня есть несколько открытых методов, которые обертывают этот метод для получения products. orders.etc (это универсальная розничная база данных).

Общий метод использует отдельный метод Connect для фактического установления соединения, и он выглядит следующим образом:

private static OleDbConnection Connect()
{
    OleDbConnection conn = new OleDbConnection(
        @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Temp\db.accdb");
    return conn;
}

Общий метод выглядит следующим образом:

private static OleDbDataAdapter GenericSelectQuery(
    DataSet ds, string namedTable, String selectString)
{
    OleDbCommand oleCommand = new OleDbCommand();
    OleDbConnection conn = Connect();
    oleCommand.CommandText = selectString;
    oleCommand.Connection = conn;
    oleCommand.CommandType = CommandType.Text;

    OleDbDataAdapter adapter = new OleDbDataAdapter();
    adapter.SelectCommand = oleCommand;
    adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    adapter.Fill(ds, namedTable);

    return adapter;
}

Методы-обёртки просто передают набор данных, полученный из основной программы, именованная строка - это имя таблицы в наборе данных, и вы передаете запрос, который хотите сделать.

Неважно, какой запрос я ему даю (даже что-то простое, например SELECT * FROM TableName), я все равно получаю исключение OleDbException, заявляя, что в предложении FROM запроса была ошибка en. Я только что прибегнул к созданию запросов с помощью Access, но все еще бесполезно. Очевидно, что с моим кодом что-то не так, что на самом деле меня не удивит.

Вот некоторые методы-оболочки, которые я использую.

public static OleDbDataAdapter GetOrderLines(DataSet ds)
{
    OleDbDataAdapter adapter = GenericSelectQuery(
        ds, "orderlines", "SELECT OrderLine.* FROM OrderLine;");
    return adapter;
}

Они все выглядят одинаково, меняется только SQL.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2012

Квадратные скобки, похоже, решили проблему. Оказывается, я использовал ключевое слово. Хммм.

0 голосов
/ 28 марта 2012

Вы пробовали что-то более простое, чтобы увидеть, если у вас есть подключение к таблице, которую вы ищете. Что-то вроде

  DataSet ds = new DataSet();
  using (OleDbConnection myConnection = new OleDbConnection
         (@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Temp\db.accdb"))
            {
            myConnection.Open();
            OleDbDataAdapter myAdapter = new OleDbDataAdapter("SELECT OrderLine.* FROM OrderLine;, myConnection);
            myAdapter.TableMappings.Add("Table", "TestTable");
            myAdapter.Fill(ds);               
            }                    

Затем проверьте, есть ли в ds значение

.
  ds.Tables[0].Rows.Count()

Это на самом деле покажет вам, если вы попали в БД и получили результаты. Оттуда вы можете сделать его более элегантным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...