Gefunden sehr seltsames Verhalten der MS Access-Datenbank beim Ausführen von Abfragen von C#. Es scheint, dass, wenn die Abfrage in MS Access eine "like" -Anweisung enthält, das Ergebnis nicht an Oledb zurückgegeben wird. Wenn jemand weiß, wie das zu lösen ist, werde ich sehr dankbar sein. C# -Code:Ausführen von MS Access gespeicherten Abfrage von C#
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();
}
}
und Abfrage [qry_1] gespeichert in MS Access-Datenbank wie folgt aussieht:
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*')
Also, wenn ich es in Access ausführen funktioniert es ganz gut, aber wenn ich nenne diese Abfrage von C# Ich bekomme die Ausnahme "Daten nicht gefunden". Wenn ich die letzte Zeichenfolge (mit LIKE) in der Abfrage lösche, fängt alles an zu arbeiten
Es hat funktioniert! Jetzt funktioniert die Abfrage in Access zwar nicht, aber das ist mir egal. Vielen Dank! – Vadim
@Vadim Gern geschehen. –