- 增加 IAdo.ExecuteConnectTest 快速判断连接是否可用 #113;

This commit is contained in:
28810
2020-08-24 12:39:22 +08:00
parent d266446062
commit d951b475d9
21 changed files with 164 additions and 0 deletions

View File

@ -532,5 +532,14 @@
<param name="that"></param> <param name="that"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="globalDataFilter"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members> </members>
</doc> </doc>

View File

@ -18,6 +18,11 @@ namespace FreeSql.Tests.MySqlConnector
var t2 = g.mysql.Ado.SlavePools.Count; var t2 = g.mysql.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.mysql.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -18,6 +18,11 @@ namespace FreeSql.Tests.Odbc.Dameng
var t2 = g.dameng.Ado.SlavePools.Count; var t2 = g.dameng.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.dameng.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -19,6 +19,11 @@ namespace FreeSql.Tests.Odbc.Default
var t2 = g.odbc.Ado.SlavePools.Count; var t2 = g.odbc.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.odbc.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -18,6 +18,11 @@ namespace FreeSql.Tests.Odbc.KingbaseES
var t2 = g.kingbaseES.Ado.SlavePools.Count; var t2 = g.kingbaseES.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.kingbaseES.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -19,6 +19,11 @@ namespace FreeSql.Tests.Odbc.MySql
var t2 = g.mysql.Ado.SlavePools.Count; var t2 = g.mysql.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.mysql.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -18,6 +18,11 @@ namespace FreeSql.Tests.Odbc.Oracle
var t2 = g.oracle.Ado.SlavePools.Count; var t2 = g.oracle.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.oracle.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -18,6 +18,11 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
var t2 = g.pgsql.Ado.SlavePools.Count; var t2 = g.pgsql.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.pgsql.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -20,6 +20,11 @@ namespace FreeSql.Tests.Odbc.SqlServer
var t2 = g.sqlserver.Ado.SlavePools.Count; var t2 = g.sqlserver.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.sqlserver.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -18,6 +18,11 @@ namespace FreeSql.Tests.Dameng
var t2 = g.dameng.Ado.SlavePools.Count; var t2 = g.dameng.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.dameng.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -17,6 +17,12 @@ namespace FreeSql.Tests.MsAccess
{ {
var t2 = g.msaccess.Ado.SlavePools.Count; var t2 = g.msaccess.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.msaccess.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -18,6 +18,11 @@ namespace FreeSql.Tests.MySql
var t2 = g.mysql.Ado.SlavePools.Count; var t2 = g.mysql.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.mysql.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -18,6 +18,11 @@ namespace FreeSql.Tests.Oracle
var t2 = g.oracle.Ado.SlavePools.Count; var t2 = g.oracle.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.oracle.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -18,6 +18,11 @@ namespace FreeSql.Tests.PostgreSQL
var t2 = g.pgsql.Ado.SlavePools.Count; var t2 = g.pgsql.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.pgsql.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -18,6 +18,11 @@ namespace FreeSql.Tests.ShenTong
var t2 = g.shentong.Ado.SlavePools.Count; var t2 = g.shentong.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.shentong.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -29,6 +29,11 @@ namespace FreeSql.Tests.SqlServer
var t2 = g.sqlserver.Ado.SlavePools.Count; var t2 = g.sqlserver.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.sqlserver.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -17,6 +17,12 @@ namespace FreeSql.Tests.Sqlite
{ {
var t2 = g.sqlite.Ado.SlavePools.Count; var t2 = g.sqlite.Ado.SlavePools.Count;
} }
[Fact]
public void ExecuteTest()
{
Assert.True(g.sqlite.Ado.ExecuteConnectTest());
}
[Fact] [Fact]
public void ExecuteReader() public void ExecuteReader()
{ {

View File

@ -2479,6 +2479,14 @@
<param name="obj">new { id = 1 } 或者 Dictionary&lt;string, object&gt;</param> <param name="obj">new { id = 1 } 或者 Dictionary&lt;string, object&gt;</param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:FreeSql.IAdo.ExecuteConnectTest">
<summary>
测试数据库是否连接正确,本方法执行如下命令:<para></para>
MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1<para></para>
Oracle: SELECT 1 FROM dual<para></para>
</summary>
<returns>true: 成功, false: 失败</returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteReader(System.Action{FreeSql.Internal.Model.FetchCallbackArgs{System.Data.Common.DbDataReader}},System.Data.CommandType,System.String,System.Data.Common.DbParameter[])"> <member name="M:FreeSql.IAdo.ExecuteReader(System.Action{FreeSql.Internal.Model.FetchCallbackArgs{System.Data.Common.DbDataReader}},System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
<summary> <summary>
查询若使用读写分离查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 查询若使用读写分离查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
@ -2618,6 +2626,14 @@
<param name="parms"></param> <param name="parms"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:FreeSql.IAdo.ExecuteConnectTestAsync">
<summary>
测试数据库是否连接正确,本方法执行如下命令:<para></para>
MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1<para></para>
Oracle: SELECT 1 FROM dual<para></para>
</summary>
<returns>true: 成功, false: 失败</returns>
</member>
<member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{FreeSql.Internal.Model.FetchCallbackArgs{System.Data.Common.DbDataReader},System.Threading.Tasks.Task},System.Data.CommandType,System.String,System.Data.Common.DbParameter[])"> <member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{FreeSql.Internal.Model.FetchCallbackArgs{System.Data.Common.DbDataReader},System.Threading.Tasks.Task},System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
<summary> <summary>
查询若使用读写分离查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 查询若使用读写分离查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】

View File

@ -62,6 +62,14 @@ namespace FreeSql
/// <returns></returns> /// <returns></returns>
DbParameter[] GetDbParamtersByObject(object obj); DbParameter[] GetDbParamtersByObject(object obj);
/// <summary>
/// 测试数据库是否连接正确,本方法执行如下命令:<para></para>
/// MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1<para></para>
/// Oracle: SELECT 1 FROM dual<para></para>
/// </summary>
/// <returns>true: 成功, false: 失败</returns>
bool ExecuteConnectTest();
/// <summary> /// <summary>
/// 查询若使用读写分离查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 /// 查询若使用读写分离查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
/// </summary> /// </summary>
@ -243,6 +251,14 @@ namespace FreeSql
#if net40 #if net40
#else #else
#region async #region async
/// <summary>
/// 测试数据库是否连接正确,本方法执行如下命令:<para></para>
/// MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1<para></para>
/// Oracle: SELECT 1 FROM dual<para></para>
/// </summary>
/// <returns>true: 成功, false: 失败</returns>
Task<bool> ExecuteConnectTestAsync();
/// <summary> /// <summary>
/// 查询若使用读写分离查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 /// 查询若使用读写分离查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
/// </summary> /// </summary>

View File

@ -95,6 +95,27 @@ namespace FreeSql.Internal.CommonProvider
var props = tb?.Properties ?? type.GetPropertiesDictIgnoreCase(); var props = tb?.Properties ?? type.GetPropertiesDictIgnoreCase();
return props; 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<T> Query<T>(string cmdText, object parms = null) => Query<T>(null, null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); public List<T> Query<T>(string cmdText, object parms = null) => Query<T>(null, null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
public List<T> Query<T>(DbTransaction transaction, string cmdText, object parms = null) => Query<T>(null, null, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); public List<T> Query<T>(DbTransaction transaction, string cmdText, object parms = null) => Query<T>(null, null, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
public List<T> Query<T>(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null) => Query<T>(null, connection, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); public List<T> Query<T>(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null) => Query<T>(null, connection, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));

View File

@ -14,6 +14,26 @@ namespace FreeSql.Internal.CommonProvider
{ {
partial class AdoProvider partial class AdoProvider
{ {
async public Task<bool> 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<List<T>> QueryAsync<T>(string cmdText, object parms = null) => QueryAsync<T>(null, null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); public Task<List<T>> QueryAsync<T>(string cmdText, object parms = null) => QueryAsync<T>(null, null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
public Task<List<T>> QueryAsync<T>(DbTransaction transaction, string cmdText, object parms = null) => QueryAsync<T>(null, null, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); public Task<List<T>> QueryAsync<T>(DbTransaction transaction, string cmdText, object parms = null) => QueryAsync<T>(null, null, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
public Task<List<T>> QueryAsync<T>(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null) => QueryAsync<T>(null, connection, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms)); public Task<List<T>> QueryAsync<T>(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null) => QueryAsync<T>(null, connection, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));