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
{