From d951b475d9b9e28a491a82ecc5963e7b8db5dcec Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Mon, 24 Aug 2020 12:39:22 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20IAdo.ExecuteConnectTes?= =?UTF-8?q?t=20=E5=BF=AB=E9=80=9F=E5=88=A4=E6=96=AD=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E5=8F=AF=E7=94=A8=20#113=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/FreeSql.DbContext.xml | 9 ++++++++ .../MySqlConnectorAdo/MySqlAdoTest.cs | 5 +++++ .../Dameng/DamengAdo/DamengAdoTest.cs | 5 +++++ .../Default/OdbcAdo/OdbcAdoTest.cs | 5 +++++ .../KingbaseESAdo/KingbaseESAdoTest.cs | 5 +++++ .../MySql/MySqlAdo/MySqlAdoTest.cs | 5 +++++ .../Oracle/OracleAdo/OracleAdoTest.cs | 5 +++++ .../PostgreSQLAdo/PostgreSQLAdoTest.cs | 5 +++++ .../SqlServerAdo/SqlServerAdoTest.cs | 5 +++++ .../Dameng/DamengAdo/DamengAdoTest.cs | 5 +++++ .../MsAccess/MsAccessAdo/MsAccessAdoTest.cs | 6 ++++++ .../MySql/MySqlAdo/MySqlAdoTest.cs | 5 +++++ .../Oracle/OracleAdo/OracleAdoTest.cs | 5 +++++ .../PostgreSQLAdo/PostgreSQLAdoTest.cs | 5 +++++ .../ShenTong/ShenTongAdo/ShenTongAdoTest.cs | 5 +++++ .../SqlServerAdo/SqlServerAdoTest.cs | 5 +++++ .../Sqlite/SqliteAdo/SqliteAdoTest.cs | 6 ++++++ FreeSql/FreeSql.xml | 16 ++++++++++++++ FreeSql/Interface/IAdo.cs | 16 ++++++++++++++ .../CommonProvider/AdoProvider/AdoProvider.cs | 21 +++++++++++++++++++ .../AdoProvider/AdoProviderAsync.cs | 20 ++++++++++++++++++ 21 files changed, 164 insertions(+) diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 9c6cd88b..743835e4 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -532,5 +532,14 @@ + + + 批量注入 Repository,可以参考代码自行调整 + + + + + + diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorAdo/MySqlAdoTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorAdo/MySqlAdoTest.cs index 9fc81f4a..2b3d9f5c 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorAdo/MySqlAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlConnectorAdo/MySqlAdoTest.cs @@ -18,6 +18,11 @@ namespace FreeSql.Tests.MySqlConnector var t2 = g.mysql.Ado.SlavePools.Count; } + [Fact] + public void ExecuteTest() + { + Assert.True(g.mysql.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengAdo/DamengAdoTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengAdo/DamengAdoTest.cs index 408d4ee4..43f8191a 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengAdo/DamengAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengAdo/DamengAdoTest.cs @@ -18,6 +18,11 @@ namespace FreeSql.Tests.Odbc.Dameng var t2 = g.dameng.Ado.SlavePools.Count; } + [Fact] + public void ExecuteTest() + { + Assert.True(g.dameng.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcAdo/OdbcAdoTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcAdo/OdbcAdoTest.cs index 8a81857e..525d86a7 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcAdo/OdbcAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Default/OdbcAdo/OdbcAdoTest.cs @@ -19,6 +19,11 @@ namespace FreeSql.Tests.Odbc.Default var t2 = g.odbc.Ado.SlavePools.Count; } + [Fact] + public void ExecuteTest() + { + Assert.True(g.odbc.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESAdo/KingbaseESAdoTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESAdo/KingbaseESAdoTest.cs index f37a4b02..6b382d2f 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESAdo/KingbaseESAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESAdo/KingbaseESAdoTest.cs @@ -18,6 +18,11 @@ namespace FreeSql.Tests.Odbc.KingbaseES var t2 = g.kingbaseES.Ado.SlavePools.Count; } + [Fact] + public void ExecuteTest() + { + Assert.True(g.kingbaseES.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlAdo/MySqlAdoTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlAdo/MySqlAdoTest.cs index e38cd06b..0029774e 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlAdo/MySqlAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlAdo/MySqlAdoTest.cs @@ -19,6 +19,11 @@ namespace FreeSql.Tests.Odbc.MySql var t2 = g.mysql.Ado.SlavePools.Count; } + [Fact] + public void ExecuteTest() + { + Assert.True(g.mysql.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleAdo/OracleAdoTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleAdo/OracleAdoTest.cs index 419dac02..2c315e56 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleAdo/OracleAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleAdo/OracleAdoTest.cs @@ -18,6 +18,11 @@ namespace FreeSql.Tests.Odbc.Oracle var t2 = g.oracle.Ado.SlavePools.Count; } + [Fact] + public void ExecuteTest() + { + Assert.True(g.oracle.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLAdo/PostgreSQLAdoTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLAdo/PostgreSQLAdoTest.cs index 61f111de..82e59608 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLAdo/PostgreSQLAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLAdo/PostgreSQLAdoTest.cs @@ -18,6 +18,11 @@ namespace FreeSql.Tests.Odbc.PostgreSQL var t2 = g.pgsql.Ado.SlavePools.Count; } + [Fact] + public void ExecuteTest() + { + Assert.True(g.pgsql.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerAdo/SqlServerAdoTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerAdo/SqlServerAdoTest.cs index bdb889d9..24d3c318 100644 --- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerAdo/SqlServerAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerAdo/SqlServerAdoTest.cs @@ -20,6 +20,11 @@ namespace FreeSql.Tests.Odbc.SqlServer var t2 = g.sqlserver.Ado.SlavePools.Count; } + [Fact] + public void ExecuteTest() + { + Assert.True(g.sqlserver.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql.Tests/FreeSql.Tests/Dameng/DamengAdo/DamengAdoTest.cs b/FreeSql.Tests/FreeSql.Tests/Dameng/DamengAdo/DamengAdoTest.cs index 796e0a6e..01f589f6 100644 --- a/FreeSql.Tests/FreeSql.Tests/Dameng/DamengAdo/DamengAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Dameng/DamengAdo/DamengAdoTest.cs @@ -18,6 +18,11 @@ namespace FreeSql.Tests.Dameng var t2 = g.dameng.Ado.SlavePools.Count; } + [Fact] + public void ExecuteTest() + { + Assert.True(g.dameng.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessAdo/MsAccessAdoTest.cs b/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessAdo/MsAccessAdoTest.cs index fca67875..3e6ba0ef 100644 --- a/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessAdo/MsAccessAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MsAccess/MsAccessAdo/MsAccessAdoTest.cs @@ -17,6 +17,12 @@ namespace FreeSql.Tests.MsAccess { var t2 = g.msaccess.Ado.SlavePools.Count; } + + [Fact] + public void ExecuteTest() + { + Assert.True(g.msaccess.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlAdo/MySqlAdoTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlAdo/MySqlAdoTest.cs index ab37eda6..3ba3a825 100644 --- a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlAdo/MySqlAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlAdo/MySqlAdoTest.cs @@ -18,6 +18,11 @@ namespace FreeSql.Tests.MySql var t2 = g.mysql.Ado.SlavePools.Count; } + [Fact] + public void ExecuteTest() + { + Assert.True(g.mysql.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleAdo/OracleAdoTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleAdo/OracleAdoTest.cs index a2c24d8e..ae86f397 100644 --- a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleAdo/OracleAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleAdo/OracleAdoTest.cs @@ -18,6 +18,11 @@ namespace FreeSql.Tests.Oracle var t2 = g.oracle.Ado.SlavePools.Count; } + [Fact] + public void ExecuteTest() + { + Assert.True(g.oracle.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLAdo/PostgreSQLAdoTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLAdo/PostgreSQLAdoTest.cs index c84cf19d..aef0967d 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLAdo/PostgreSQLAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLAdo/PostgreSQLAdoTest.cs @@ -18,6 +18,11 @@ namespace FreeSql.Tests.PostgreSQL var t2 = g.pgsql.Ado.SlavePools.Count; } + [Fact] + public void ExecuteTest() + { + Assert.True(g.pgsql.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongAdo/ShenTongAdoTest.cs b/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongAdo/ShenTongAdoTest.cs index 84daa489..dd62f210 100644 --- a/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongAdo/ShenTongAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongAdo/ShenTongAdoTest.cs @@ -18,6 +18,11 @@ namespace FreeSql.Tests.ShenTong var t2 = g.shentong.Ado.SlavePools.Count; } + [Fact] + public void ExecuteTest() + { + Assert.True(g.shentong.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerAdo/SqlServerAdoTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerAdo/SqlServerAdoTest.cs index e0a074d8..d366322c 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerAdo/SqlServerAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerAdo/SqlServerAdoTest.cs @@ -29,6 +29,11 @@ namespace FreeSql.Tests.SqlServer var t2 = g.sqlserver.Ado.SlavePools.Count; } + [Fact] + public void ExecuteTest() + { + Assert.True(g.sqlserver.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteAdo/SqliteAdoTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteAdo/SqliteAdoTest.cs index 02bb40dc..004aec54 100644 --- a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteAdo/SqliteAdoTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteAdo/SqliteAdoTest.cs @@ -17,6 +17,12 @@ namespace FreeSql.Tests.Sqlite { var t2 = g.sqlite.Ado.SlavePools.Count; } + + [Fact] + public void ExecuteTest() + { + Assert.True(g.sqlite.Ado.ExecuteConnectTest()); + } [Fact] public void ExecuteReader() { diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index a5622151..b588f700 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -2479,6 +2479,14 @@ new { id = 1 } 或者 Dictionary<string, object> + + + 测试数据库是否连接正确,本方法执行如下命令: + MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1 + Oracle: SELECT 1 FROM dual + + true: 成功, false: 失败 + 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 @@ -2618,6 +2626,14 @@ + + + 测试数据库是否连接正确,本方法执行如下命令: + MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1 + Oracle: SELECT 1 FROM dual + + true: 成功, false: 失败 + 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 diff --git a/FreeSql/Interface/IAdo.cs b/FreeSql/Interface/IAdo.cs index afa01638..238bfc04 100644 --- a/FreeSql/Interface/IAdo.cs +++ b/FreeSql/Interface/IAdo.cs @@ -62,6 +62,14 @@ namespace FreeSql /// DbParameter[] GetDbParamtersByObject(object obj); + /// + /// 测试数据库是否连接正确,本方法执行如下命令: + /// MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1 + /// Oracle: SELECT 1 FROM dual + /// + /// true: 成功, false: 失败 + bool ExecuteConnectTest(); + /// /// 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 /// @@ -243,6 +251,14 @@ namespace FreeSql #if net40 #else #region async + /// + /// 测试数据库是否连接正确,本方法执行如下命令: + /// MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1 + /// Oracle: SELECT 1 FROM dual + /// + /// true: 成功, false: 失败 + Task ExecuteConnectTestAsync(); + /// /// 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 /// diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs index 5d3100ad..921673f6 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs @@ -95,6 +95,27 @@ namespace FreeSql.Internal.CommonProvider var props = tb?.Properties ?? type.GetPropertiesDictIgnoreCase(); return props; } + + public bool ExecuteConnectTest() + { + try + { + switch (DataType) + { + case DataType.Oracle: + case DataType.OdbcOracle: + ExecuteNonQuery(" SELECT 1 FROM dual"); + return true; + } + ExecuteNonQuery(" SELECT 1"); + return true; + } + catch + { + return false; + } + } + public List Query(string cmdText, object parms = null) => Query(null, null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); public List Query(DbTransaction transaction, string cmdText, object parms = null) => Query(null, null, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); public List Query(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null) => Query(null, connection, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs index a16381b2..6d40ebcc 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProviderAsync.cs @@ -14,6 +14,26 @@ namespace FreeSql.Internal.CommonProvider { partial class AdoProvider { + async public Task ExecuteConnectTestAsync() + { + try + { + switch (DataType) + { + case DataType.Oracle: + case DataType.OdbcOracle: + await ExecuteNonQueryAsync(" SELECT 1 FROM dual"); + return true; + } + await ExecuteNonQueryAsync(" SELECT 1"); + return true; + } + catch + { + return false; + } + } + public Task> QueryAsync(string cmdText, object parms = null) => QueryAsync(null, null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); public Task> QueryAsync(DbTransaction transaction, string cmdText, object parms = null) => QueryAsync(null, null, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); public Task> QueryAsync(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null) => QueryAsync(null, connection, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));