From a9b30cc32b2eff5c04baf8f27ddb563998b98de7 Mon Sep 17 00:00:00 2001 From: Elivo Date: Wed, 23 Apr 2025 21:03:46 +0800 Subject: [PATCH] =?UTF-8?q?Access=EF=BC=8C=E4=BF=AE=E6=AD=A3=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=A1=A8=E5=90=8D=E7=9A=84=20TableNames=20=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Apewer.Source/Source/Access.cs | 51 ++++++++++++++++++++++++++++---- Apewer.Source/Source/DbClient.cs | 6 +++- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/Apewer.Source/Source/Access.cs b/Apewer.Source/Source/Access.cs index 94ebac1..fedbab2 100644 --- a/Apewer.Source/Source/Access.cs +++ b/Apewer.Source/Source/Access.cs @@ -21,6 +21,9 @@ namespace Apewer.Source /// 当操作系统启用随机化内存分配时,此方法可能会产生异常。 public static string[] ParsePassword(string path) => AccessHelper.GetPassword(path); + /// 数据库文件路径。 + public virtual string Path { get; protected set; } + } #if NETFRAMEWORK @@ -79,7 +82,33 @@ namespace Apewer.Source public override string[] StoreNames() => throw new InvalidOperationException(); /// - public override string[] TableNames() => QueryStrings("select name from msysobjects where type=1 and flags = 0"); + public override string[] TableNames() + { + // QueryStrings("select name from msysobjects where type=1 and flags = 0"); + Connect(); + var schema = _conn.GetSchema("Tables"); + using (var query = new Query(schema)) + { + var json = query.ToJson(); + var names = new List(); + for (var i = 0; i < query.Rows; i++) + { + var type = query.Text(i, "TABLE_TYPE"); + var name = query.Text(i, "TABLE_NAME"); + switch (type) + { + case "ACCESS TABLE": + case "SYSTEM TABLE": + break; + case "TABLE": + names.Add(name); + break; + } + } + names.Sort(); + return names.ToArray(); + } + } /// public override string Insert(object record, string table = null, bool adjust = true) @@ -494,12 +523,18 @@ namespace Apewer.Source /// 创建 Access 类的新实例。 /// public AccessJet4(string path, string pass = null, string jo = null, Timeout timeout = null) - : base(GenerateCS(JetOleDB4, path, pass, jo), timeout) { } + : base(GenerateCS(JetOleDB4, path, pass, jo), timeout) + { + Path = path; + } /// 使用连接字符串创建数据库连接实例。 /// /// - public AccessJet4(IDbConnection connection, Timeout timeout = null) : base(connection, timeout) { } + public AccessJet4(IDbConnection connection, Timeout timeout = null) : base(connection, timeout) + { + Path = (connection as Access)?.Path; + } } @@ -512,12 +547,18 @@ namespace Apewer.Source /// 创建 Access 类的新实例。 /// public AccessAce12(string path, string pass = null, string jo = null, Timeout timeout = null) - : base(GenerateCS(AceOleDB12, path, pass, jo), timeout) { } + : base(GenerateCS(AceOleDB12, path, pass, jo), timeout) + { + Path = path; + } /// 使用连接字符串创建数据库连接实例。 /// /// - public AccessAce12(IDbConnection connection, Timeout timeout = null) : base(connection, timeout) { } + public AccessAce12(IDbConnection connection, Timeout timeout = null) : base(connection, timeout) + { + Path = (connection as Access)?.Path; + } } diff --git a/Apewer.Source/Source/DbClient.cs b/Apewer.Source/Source/DbClient.cs index 63674a7..594edbb 100644 --- a/Apewer.Source/Source/DbClient.cs +++ b/Apewer.Source/Source/DbClient.cs @@ -102,7 +102,11 @@ namespace Apewer.Source } var connect = Connect(); - if (connect.NotEmpty()) return connect; + if (connect.NotEmpty()) + { + if (ThrowAdoException) throw new Exception(connect); + return connect; + } try {