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 { diff --git a/Apewer/Logger.cs b/Apewer/Logger.cs index 1091b5d..fec5614 100644 --- a/Apewer/Logger.cs +++ b/Apewer/Logger.cs @@ -378,24 +378,7 @@ namespace Apewer #region public - /// 记录异常。 - public void Exception(T exception, params object[] content) where T : Exception => Output("Exception", content, exception); - /// 记录错误。多个 Content 参数将以“ | ”分隔。 - public void Error(params object[] content) => Output("Error", content, null); - - /// 记录警告。多个 Content 参数将以“ | ”分隔。 - public void Warning(params object[] content) => Output("Warning", content, null); - - /// 记录警告。多个 Content 参数将以“ | ”分隔。 - public void Info(params object[] content) => Output("Info", content, null); - - /// 记录文本。多个 Content 参数将以“ | ”分隔。 - public void Text(params object[] content) => Output(null, content, null); - - /// 记录调试。多个 Content 参数将以“ | ”分隔。 - [Conditional("DEBUG")] - public void Debug(params object[] content) => Output("Debug", content, null); #endregion diff --git a/Apewer/Source/SourceUtility.cs b/Apewer/Source/SourceUtility.cs index f2edb49..d9fdc7e 100644 --- a/Apewer/Source/SourceUtility.cs +++ b/Apewer/Source/SourceUtility.cs @@ -900,7 +900,7 @@ namespace Apewer.Source if (table == null) return null; var columns = ToJson(table.Columns); - var rows = ToJson(table.Rows); + var rows = ToJson(table.Rows, dateTimeFormatter); var jsonObject = Json.NewObject(); jsonObject.SetProperty("columns", columns); diff --git a/Apewer/_Extensions.cs b/Apewer/_Extensions.cs index 81bc6d7..ab12d04 100644 --- a/Apewer/_Extensions.cs +++ b/Apewer/_Extensions.cs @@ -358,8 +358,27 @@ public static class Extensions #region Logger - /// 记录文本。多个 Content 参数将以“ | ”分隔,此方法等同于 - public static void Write(this Logger logger, object sender, params object[] content) => logger?.Text(sender, null, content, null); + /// 记录文本。多个 Content 参数将以“ | ”分隔。 + public static void Write(this Logger logger, params object[] content) => logger?.Output(null, content, null); + + /// 记录异常。 + public static void Exception(this Logger logger, T exception, params object[] content) where T : Exception => logger?.Output("Exception", content, exception); + + /// 记录错误。多个 Content 参数将以“ | ”分隔。 + public static void Error(this Logger logger, params object[] content) => logger?.Output("Error", content, null); + + /// 记录警告。多个 Content 参数将以“ | ”分隔。 + public static void Warning(this Logger logger, params object[] content) => logger?.Output("Warning", content, null); + + /// 记录警告。多个 Content 参数将以“ | ”分隔。 + public static void Info(this Logger logger, params object[] content) => logger?.Output("Info", content, null); + + /// 记录文本。多个 Content 参数将以“ | ”分隔。 + public static void Text(this Logger logger, params object[] content) => logger?.Output(null, content, null); + + /// 记录调试。多个 Content 参数将以“ | ”分隔。 + [Conditional("DEBUG")] + public static void Debug(this Logger logger, params object[] content) => logger?.Output("Debug", content, null); #endregion