From 8a0862d6fec76d1c6428052f5d3c6a1a4e2dfc92 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Wed, 23 Sep 2020 22:00:48 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20IAdo.CommandFluent(sql?= =?UTF-8?q?)=20=E6=96=B9=E6=B3=95=E6=89=A7=E8=A1=8C=20SQL=20=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=EF=BC=9B=20-=20=E4=BF=AE=E5=A4=8D=20SqlServer=20SqlBu?= =?UTF-8?q?lkCopy=20IgnoreColumns=20=E6=97=A0=E6=95=88=E7=9A=84=20bug?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FreeSql.Generator.csproj | 2 +- FreeSql.DbContext/FreeSql.DbContext.xml | 7 -- .../SqlServer/Curd/SqlServerInsertTest.cs | 1 + FreeSql/FreeSql.xml | 52 ++++++++ FreeSql/Interface/IAdo.cs | 15 +++ .../CommonProvider/AdoProvider/AdoProvider.cs | 7 +- FreeSql/Internal/Model/AdoCommandFluent.cs | 113 ++++++++++++++++++ .../DamengAdo/DamengAdo.cs | 4 +- .../FirebirdAdo/FirebirdAdo.cs | 4 +- .../KingbaseESAdo/KingbaseESAdo.cs | 4 +- .../MsAccessAdo/MsAccessAdo.cs | 4 +- .../MySqlAdo/MySqlAdo.cs | 4 +- .../Dameng/OdbcDamengAdo/OdbcDamengAdo.cs | 4 +- .../Default/OdbcAdo/OdbcAdo.cs | 4 +- .../OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs | 4 +- .../MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs | 4 +- .../Oracle/OdbcOracleAdo/OdbcOracleAdo.cs | 4 +- .../OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs | 4 +- .../OdbcSqlServerAdo/OdbcSqlServerAdo.cs | 4 +- .../OracleAdo/OracleAdo.cs | 4 +- .../PostgreSQLAdo/PostgreSQLAdo.cs | 4 +- .../ShenTongAdo/ShenTongAdo.cs | 4 +- .../SqlServerAdo/SqlServerAdo.cs | 4 +- .../SqlServerExtensions.cs | 4 + .../SqliteAdo/SqliteAdo.cs | 4 +- 25 files changed, 225 insertions(+), 44 deletions(-) create mode 100644 FreeSql/Internal/Model/AdoCommandFluent.cs diff --git a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj index 390f6b4c9..d8deda050 100644 --- a/Extensions/FreeSql.Generator/FreeSql.Generator.csproj +++ b/Extensions/FreeSql.Generator/FreeSql.Generator.csproj @@ -12,7 +12,7 @@ 使用 FreeSql 快速生成数据库的实体类,安装:dotnet tool install -g FreeSql.Generator https://github.com/2881099/FreeSql https://github.com/2881099/FreeSql - 1.8.1.330 + 1.9.0-preview0920 FreeSql DbFirst 实体生成器 diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 9c6cd88b4..5a0c8bd01 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -130,13 +130,6 @@ 清空状态数据 - - - 根据 lambda 条件删除数据 - - - - 添加 diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerInsertTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerInsertTest.cs index 356f5fcf5..eb7d8c0fe 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerInsertTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerInsertTest.cs @@ -171,6 +171,7 @@ public void ExecuteSqlBulkCopy() for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100, CreateTime = DateTime.Now }); insert.AppendData(items).InsertIdentity().ExecuteSqlBulkCopy(); + insert.AppendData(items).IgnoreColumns(a => new { a.CreateTime, a.Clicks }).ExecuteSqlBulkCopy(); // System.NotSupportedException:“DataSet does not support System.Nullable<>.” } diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index b99f558ce..330dc4ac0 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -2805,6 +2805,21 @@ new { id = 1 } 或者 Dictionary<string, object> + + + SQL 命令执行类,fsql.Ado.CommandFluent("select * from user where age > ?age", new { age = 25 }) + .WithConnection(connection) + .WithTransaction(transaction) + .WithParameter("age", 25) + .WithParameter("id", 11) + .CommandType(CommandType.Text) + .CommandTimeout(60) + .Query<T>(); 或者 ExecuteNonQuery/ExecuteScalar/ExecuteDataTable/ExecuteDataSet/ExecuteArray + + + + + 测试数据库是否连接正确,本方法执行如下命令: @@ -3674,6 +3689,43 @@ 表达式 + + + 使用指定 DbConnection 连接执行 + + + + + + + 使用指定 DbTransaction 事务执行 + + + + + + + 增加参数化对象 + + 参数名 + 参数值 + 修改本次创建好的参数化对象,比如将 parameterName 参数修改为 Output 类型 + + + + + 设置执行的命令类型,SQL文本、或存储过程 + + + + + + + 设置命令执行超时(秒) + + + + 当前操作的数据 diff --git a/FreeSql/Interface/IAdo.cs b/FreeSql/Interface/IAdo.cs index a0e5dde91..69ce18f97 100644 --- a/FreeSql/Interface/IAdo.cs +++ b/FreeSql/Interface/IAdo.cs @@ -62,6 +62,21 @@ public partial interface IAdo /// DbParameter[] GetDbParamtersByObject(object obj); + /// + /// SQL 命令执行类,fsql.Ado.CommandFluent("select * from user where age > ?age", new { age = 25 }) + /// .WithConnection(connection) + /// .WithTransaction(transaction) + /// .WithParameter("age", 25) + /// .WithParameter("id", 11) + /// .CommandType(CommandType.Text) + /// .CommandTimeout(60) + /// .Query<T>(); 或者 ExecuteNonQuery/ExecuteScalar/ExecuteDataTable/ExecuteDataSet/ExecuteArray + /// + /// + /// + /// + AdoCommandFluent CommandFluent(string cmdText, object parms = null); + /// /// 测试数据库是否连接正确,本方法执行如下命令: /// MySql/SqlServer/PostgreSQL/达梦/人大金仓/神通: SELECT 1 diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs index f38845bae..6abba9928 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs @@ -16,8 +16,8 @@ public abstract partial class AdoProvider : IAdo, IDisposable { protected abstract void ReturnConnection(IObjectPool pool, Object conn, Exception ex); - protected abstract DbCommand CreateCommand(); - protected abstract DbParameter[] GetDbParamtersByObject(string sql, object obj); + public abstract DbCommand CreateCommand(); + public abstract DbParameter[] GetDbParamtersByObject(string sql, object obj); public DbParameter[] GetDbParamtersByObject(object obj) => GetDbParamtersByObject("*", obj); protected bool IsTracePerformance => _util?._orm?.Aop.CommandAfterHandler != null; @@ -28,6 +28,7 @@ public abstract partial class AdoProvider : IAdo, IDisposable public string ConnectionString { get; } public string[] SlaveConnectionStrings { get; } public Guid Identifier { get; } + protected CommonUtils _util { get; set; } protected int slaveUnavailables = 0; private object slaveLock = new object(); @@ -97,6 +98,8 @@ internal Dictionary GetQueryTypeProperties(Type type) //return props; } + public AdoCommandFluent CommandFluent(string cmdText, object parms = null) => new AdoCommandFluent(this, cmdText, parms); + public bool ExecuteConnectTest(int commandTimeout = 0) { try diff --git a/FreeSql/Internal/Model/AdoCommandFluent.cs b/FreeSql/Internal/Model/AdoCommandFluent.cs new file mode 100644 index 000000000..8accc9aa6 --- /dev/null +++ b/FreeSql/Internal/Model/AdoCommandFluent.cs @@ -0,0 +1,113 @@ +using FreeSql.Internal.CommonProvider; +using System; +using System.Collections.Generic; +using System.Data; +using System.Data.Common; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FreeSql.Internal.Model +{ + public class AdoCommandFluent + { + internal protected AdoProvider Ado { get; protected set; } + internal protected DbConnection Connection { get; protected set; } + internal protected DbTransaction Transaction { get; protected set; } + internal protected CommandType CmdType { get; protected set; } = System.Data.CommandType.Text; + internal protected string CmdText { get; protected set; } + internal protected int CmdTimeout { get; protected set; } + internal protected List CmdParameters { get; } = new List(); + + public AdoCommandFluent(AdoProvider ado, string commandText, object parms) + { + this.Ado = ado; + this.CmdText = commandText; + this.CmdParameters.AddRange(this.Ado.GetDbParamtersByObject(parms)); + } + + /// + /// 使用指定 DbConnection 连接执行 + /// + /// + /// + public AdoCommandFluent WithConnection(DbConnection conn) + { + this.Transaction = null; + this.Connection = conn; + return this; + } + /// + /// 使用指定 DbTransaction 事务执行 + /// + /// + /// + public AdoCommandFluent WithTransaction(DbTransaction tran) + { + this.Transaction = tran; + if (tran != null) this.Connection = tran.Connection; + return this; + } + + /// + /// 增加参数化对象 + /// + /// 参数名 + /// 参数值 + /// 修改本次创建好的参数化对象,比如将 parameterName 参数修改为 Output 类型 + /// + public AdoCommandFluent WithParameter(string parameterName, object value, Action modify = null) + { + var param = this.Ado.GetDbParamtersByObject(new Dictionary { [parameterName] = value }).FirstOrDefault(); + modify?.Invoke(param); + this.CmdParameters.Add(param); + return this; + } + + /// + /// 设置执行的命令类型,SQL文本、或存储过程 + /// + /// + /// + public AdoCommandFluent CommandType(CommandType commandType) + { + this.CmdType = commandType; + return this; + } + /// + /// 设置命令执行超时(秒) + /// + /// + /// + public AdoCommandFluent CommandTimeout(int commandTimeout) + { + this.CmdTimeout = commandTimeout; + return this; + } + + public int ExecuteNonQuery() => this.Ado.ExecuteNonQuery(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public object ExecuteScalar() => this.Ado.ExecuteScalar(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public DataTable ExecuteDataTable() => this.Ado.ExecuteDataTable(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public DataSet ExecuteDataSet() => this.Ado.ExecuteDataSet(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public object[][] ExecuteArray() => this.Ado.ExecuteArray(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public List Query() => this.Ado.Query(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public NativeTuple, List> Query() => this.Ado.Query(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public NativeTuple, List, List> Query() => this.Ado.Query(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public NativeTuple, List, List, List> Query() => this.Ado.Query(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public NativeTuple, List, List, List, List> Query() => this.Ado.Query(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + +#if net40 +#else + public Task ExecuteNonQueryAsync() => this.Ado.ExecuteNonQueryAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public Task ExecuteScalarAsync() => this.Ado.ExecuteScalarAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public Task ExecuteDataTableAsync() => this.Ado.ExecuteDataTableAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public Task ExecuteDataSetAsync() => this.Ado.ExecuteDataSetAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public Task ExecuteArrayAsync() => this.Ado.ExecuteArrayAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public Task> QueryAsync() => this.Ado.QueryAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public Task, List>> QueryAsync() => this.Ado.QueryAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public Task, List, List>> QueryAsync() => this.Ado.QueryAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public Task, List, List, List>> QueryAsync() => this.Ado.QueryAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); + public Task, List, List, List, List>> QueryAsync() => this.Ado.QueryAsync(this.Connection, this.Transaction, this.CmdType, this.CmdText, this.CmdTimeout, this.CmdParameters.ToArray()); +#endif + } +} diff --git a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs index 68f0c7ed0..64634235c 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengAdo/DamengAdo.cs @@ -60,7 +60,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column //if (param is string) return string.Concat('N', nparms[a]); } - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { return new DmCommand(); } @@ -72,6 +72,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs index 7f5988e2b..40bbf3134 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs @@ -62,7 +62,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column } DbConnection _CreateCommandConnection; - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { if (_CreateCommandConnection != null) { @@ -80,6 +80,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } diff --git a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs index a3f339882..cad591ac3 100644 --- a/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs +++ b/Providers/FreeSql.Provider.KingbaseES/KingbaseESAdo/KingbaseESAdo.cs @@ -61,7 +61,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { return new KdbndpCommand(); } @@ -73,6 +73,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } diff --git a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs index a86c5a4f6..1f69bec9c 100644 --- a/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs +++ b/Providers/FreeSql.Provider.MsAccess/MsAccessAdo/MsAccessAdo.cs @@ -65,7 +65,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { return new OleDbCommand(); } @@ -77,6 +77,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs index dd9fdbab2..66f62f8e8 100644 --- a/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs +++ b/Providers/FreeSql.Provider.MySql/MySqlAdo/MySqlAdo.cs @@ -67,7 +67,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\"), "'"); } - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { return new MySqlCommand(); } @@ -79,6 +79,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs index 478dec5e2..56ea4ebdd 100644 --- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengAdo/OdbcDamengAdo.cs @@ -61,7 +61,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column //if (param is string) return string.Concat('N', nparms[a]); } - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { return new OdbcCommand(); } @@ -73,6 +73,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } diff --git a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs index ce5ca081f..bda2426bf 100644 --- a/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Default/OdbcAdo/OdbcAdo.cs @@ -62,7 +62,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { return new OdbcCommand(); } @@ -74,6 +74,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs index 11d374745..94b9bda8e 100644 --- a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESAdo/OdbcKingbaseESAdo.cs @@ -61,7 +61,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { return new OdbcCommand(); } @@ -73,6 +73,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs index b1d7573d6..0c18f7b73 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlAdo/OdbcMySqlAdo.cs @@ -61,7 +61,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column return string.Concat("'", param.ToString().Replace("'", "''").Replace("\\", "\\\\"), "'"); } - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { return new OdbcCommand(); } @@ -73,6 +73,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs index e00416665..4e81bef15 100644 --- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleAdo/OdbcOracleAdo.cs @@ -61,7 +61,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column //if (param is string) return string.Concat('N', nparms[a]); } - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { return new OdbcCommand(); } @@ -73,6 +73,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs index 72c196a56..e8f0c53e4 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLAdo/OdbcPostgreSQLAdo.cs @@ -62,7 +62,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { return new OdbcCommand(); } @@ -74,6 +74,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs index c62771053..73ad461f2 100644 --- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs +++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerAdo/OdbcSqlServerAdo.cs @@ -75,7 +75,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { return new OdbcCommand(); } @@ -87,6 +87,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs index f0c427089..57d161e08 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleAdo/OracleAdo.cs @@ -61,7 +61,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column //if (param is string) return string.Concat('N', nparms[a]); } - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { var cmd = new OracleCommand(); cmd.BindByName = true; @@ -75,6 +75,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs index 12bfafcc1..857ca688c 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLAdo/PostgreSQLAdo.cs @@ -79,7 +79,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { return new NpgsqlCommand(); } @@ -91,6 +91,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs index eaa0e7b3b..33da3ebd3 100644 --- a/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs +++ b/Providers/FreeSql.Provider.ShenTong/ShenTongAdo/ShenTongAdo.cs @@ -62,7 +62,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column return string.Concat("'", param.ToString().Replace("'", "''"), "'"); } - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { return new OscarCommand(); } @@ -74,6 +74,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs index 52edb94be..9266c037c 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerAdo/SqlServerAdo.cs @@ -83,7 +83,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column } DbConnection _CreateCommandConnection; - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { if (_CreateCommandConnection != null) { @@ -101,6 +101,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } } \ No newline at end of file diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs index 021d09e53..e399bd74c 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs @@ -82,6 +82,8 @@ public static void ExecuteSqlBulkCopy(this IInsert that, SqlBulkCopyOption if (batchSize.HasValue) bulkCopy.BatchSize = batchSize.Value; if (bulkCopyTimeout.HasValue) bulkCopy.BulkCopyTimeout = bulkCopyTimeout.Value; bulkCopy.DestinationTableName = dt.TableName; + for (int i = 0; i < dt.Columns.Count; i++) + bulkCopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); bulkCopy.WriteToServer(dt); }; @@ -157,6 +159,8 @@ async public static Task ExecuteSqlBulkCopyAsync(this IInsert that, SqlBul if (batchSize.HasValue) bulkCopy.BatchSize = batchSize.Value; if (bulkCopyTimeout.HasValue) bulkCopy.BulkCopyTimeout = bulkCopyTimeout.Value; bulkCopy.DestinationTableName = dt.TableName; + for (int i = 0; i < dt.Columns.Count; i++) + bulkCopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); return bulkCopy.WriteToServerAsync(dt); }; diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs index 1f928e469..a911d9b1f 100644 --- a/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs +++ b/Providers/FreeSql.Provider.Sqlite/SqliteAdo/SqliteAdo.cs @@ -64,7 +64,7 @@ public override object AddslashesProcessParam(object param, Type mapType, Column } DbConnection _CreateCommandConnection; - protected override DbCommand CreateCommand() + public override DbCommand CreateCommand() { if (_CreateCommandConnection != null) { @@ -82,6 +82,6 @@ protected override void ReturnConnection(IObjectPool pool, Object< else pool.Return(conn); } - protected override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); + public override DbParameter[] GetDbParamtersByObject(string sql, object obj) => _util.GetDbParamtersByObject(sql, obj); } }