Запуск MS Access сохраненный запрос из C # - PullRequest
4 голосов
/ 27 марта 2012

Обнаружено очень странное поведение базы данных MS Access при выполнении запросов из c #.Похоже, что если запрос в MS Access содержит оператор «like», он не вернет свой результат в Oledb.Если кто-нибудь знает, как решить эту проблему, я буду очень благодарен.c # code:

DataTable GetAccessData(string FileName, string Password)
    {
        Query = "select * from [qry_1]";
        DataTable DT = access2dt
            (
            FileName,Password,Query);

        MessageBox.Show(Query);
        if (DT == null || DT.Rows.Count <= 1) throw new Exception("Data not found");
        else return DT;
    }

public static DataTable access2dt(string filename, string password, string query)
{
    string conString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Jet OLEDB:Database Password=" + password;
    OleDbConnection mycon;
    mycon = new OleDbConnection(conString);

    if (mycon.State == ConnectionState.Closed)
    {
        mycon.Open();
    }
    try
    {
        OleDbCommand accessCommand = new OleDbCommand();
        System.Data.DataTable dt = new System.Data.DataTable();
        accessCommand = new OleDbCommand(query, mycon);

        using (OleDbDataReader myReader = accessCommand.ExecuteReader())
        {
            DataTable myTable = new DataTable();
            myTable.Load(myReader);
            return myTable;
        }
    }
    finally
    {
        mycon.Close();
    }

}

И запрос [qry_1], сохраненный в базе данных MS Access, выглядит следующим образом:

SELECT tbl_MAPPING_GICM_AoA.[Type of expense]
FROM tbl_USGAAP_ALL_TRANS, tbl_MAPPING_GICM_AoA
WHERE tbl_USGAAP_ALL_TRANS.[Account]=[tbl_MAPPING_GICM_AoA].[Natural Account]
AND tbl_USGAAP_ALL_TRANS.[Created By] NOT IN (SELECT [Created by / User ID] FROM tbl_GICM_AoA_EXCL_FACTOR1)
AND tbl_USGAAP_ALL_TRANS.[Je Source] NOT IN (SELECT [JE SOURCE] FROM tbl_GICM_AoA_EXCL_FACTOR2)
AND tbl_USGAAP_ALL_TRANS.[Je Category] NOT IN (SELECT [JE CATEGORY] FROM tbl_GICM_AoA_EXCL_FACTOR3)
AND (tbl_USGAAP_ALL_TRANS.[Account] LIKE '4*' OR tbl_USGAAP_ALL_TRANS.[Account] LIKE '5*'  OR tbl_USGAAP_ALL_TRANS.[Account] LIKE '6*' )

Так что, когда я запускаю его в Access, он работает просто отлично, но когда я звонюЭтот запрос от C # я получаю исключение «Данные не найдены».Если я удаляю последнюю строку (с LIKE) в запросе, все начинает работать

1 Ответ

6 голосов
/ 27 марта 2012

Попробуйте заменить подстановочный знак. Access использует '*', но при использовании OLEDB вам нужно будет использовать '%' в качестве подстановочного знака.

...