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