From a3720bf81e9219a0b940223342b478b595a66bb8 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Wed, 27 Feb 2019 19:16:26 +0800 Subject: [PATCH] =?UTF-8?q?v0.1.4=20=E5=88=A4=E6=96=AD=20SqlServer=20?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E7=89=88=E6=9C=AC=EF=BC=8C=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=88=86=E9=A1=B5=E6=A8=A1=E5=BC=8F=20row=5Fnumber=20?= =?UTF-8?q?=E6=88=96=20offset=20fetch=20next=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.Repository/FreeSql.Repository.csproj | 2 +- FreeSql.Tests/SqlServer/SqlServerAdo/SqlServerAdoTest.cs | 6 +++++- FreeSql/FreeSql.csproj | 2 +- FreeSql/SqlServer/Curd/SqlServerSelect.cs | 4 +++- FreeSql/SqlServer/SqlServerProvider.cs | 7 +++++++ FreeSql/SqlServer/SqlServerUtils.cs | 2 ++ 6 files changed, 19 insertions(+), 4 deletions(-) diff --git a/FreeSql.Repository/FreeSql.Repository.csproj b/FreeSql.Repository/FreeSql.Repository.csproj index 285a6fc4..dec2629c 100644 --- a/FreeSql.Repository/FreeSql.Repository.csproj +++ b/FreeSql.Repository/FreeSql.Repository.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.1.3 + 0.1.4 YeXiangQin FreeSql 通用仓库层现实,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite 数据库。 https://github.com/2881099/FreeSql diff --git a/FreeSql.Tests/SqlServer/SqlServerAdo/SqlServerAdoTest.cs b/FreeSql.Tests/SqlServer/SqlServerAdo/SqlServerAdoTest.cs index fe736445..9b0bed49 100644 --- a/FreeSql.Tests/SqlServer/SqlServerAdo/SqlServerAdoTest.cs +++ b/FreeSql.Tests/SqlServer/SqlServerAdo/SqlServerAdoTest.cs @@ -50,7 +50,11 @@ namespace FreeSql.Tests.SqlServer { // .LeftJoin((a, b) => b.Id == a.Id) // .ToList(a => new { a.Id, a.Title }); - var tn = g.sqlserver.Select().Where(a => a.Id > 0).Where(b => b.Title != null).ToList(a => a.Id); + var tnsql1 = g.sqlserver.Select().Where(a => a.Id > 0).Where(b => b.Title != null).Page(1, 3).ToSql(a => a.Id); + var tnsql2 = g.sqlserver.Select().Where(a => a.Id > 0).Where(b => b.Title != null).Page(2, 3).ToSql(a => a.Id); + + var tn1 = g.sqlserver.Select().Where(a => a.Id > 0).Where(b => b.Title != null).Page(1, 3).ToList(a => a.Id); + var tn2 = g.sqlserver.Select().Where(a => a.Id > 0).Where(b => b.Title != null).Page(2, 3).ToList(a => a.Id); var t3 = g.sqlserver.Ado.Query("select * from song"); diff --git a/FreeSql/FreeSql.csproj b/FreeSql/FreeSql.csproj index cdf49b94..8b91c95f 100644 --- a/FreeSql/FreeSql.csproj +++ b/FreeSql/FreeSql.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.1.3 + 0.1.4 true YeXiangQin 打造 .NETCore 最方便的 ORM,DbFirst 与 CodeFirst 混合使用,提供从实体同步数据库,或者从数据库生成实体代码,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite 数据库。 diff --git a/FreeSql/SqlServer/Curd/SqlServerSelect.cs b/FreeSql/SqlServer/Curd/SqlServerSelect.cs index 31dd47c8..cd7e127f 100644 --- a/FreeSql/SqlServer/Curd/SqlServerSelect.cs +++ b/FreeSql/SqlServer/Curd/SqlServerSelect.cs @@ -11,7 +11,9 @@ namespace FreeSql.SqlServer.Curd { class SqlServerSelect : FreeSql.Internal.CommonProvider.Select1Provider where T1 : class { internal static string ToSqlStatic(CommonUtils _commonUtils, string _select, string field, StringBuilder _join, StringBuilder _where, string _groupby, string _having, string _orderby, int _skip, int _limit, List _tables, IFreeSql _orm) - => ToSqlStaticRowNumber(_commonUtils, _select, field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, _orm); + => (_commonUtils as SqlServerUtils).IsSelectRowNumber ? + ToSqlStaticRowNumber(_commonUtils, _select, field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, _orm) : + ToSqlStaticOffsetFetchNext(_commonUtils, _select, field, _join, _where, _groupby, _having, _orderby, _skip, _limit, _tables, _orm); #region SqlServer 2005 row_number internal static string ToSqlStaticRowNumber(CommonUtils _commonUtils, string _select, string field, StringBuilder _join, StringBuilder _where, string _groupby, string _having, string _orderby, int _skip, int _limit, List _tables, IFreeSql _orm) { diff --git a/FreeSql/SqlServer/SqlServerProvider.cs b/FreeSql/SqlServer/SqlServerProvider.cs index dfed9862..f03172f4 100644 --- a/FreeSql/SqlServer/SqlServerProvider.cs +++ b/FreeSql/SqlServer/SqlServerProvider.cs @@ -36,6 +36,13 @@ namespace FreeSql.SqlServer { this.DbFirst = new SqlServerDbFirst(this, this.InternalCommonUtils, this.InternalCommonExpression); this.CodeFirst = new SqlServerCodeFirst(this, this.InternalCommonUtils, this.InternalCommonExpression); + + using (var conn = this.Ado.MasterPool.Get()) { + try { + (this.InternalCommonUtils as SqlServerUtils).IsSelectRowNumber = int.Parse(conn.Value.ServerVersion.Split('.')[0]) <= 10; + } catch { + } + } } internal CommonUtils InternalCommonUtils { get; } diff --git a/FreeSql/SqlServer/SqlServerUtils.cs b/FreeSql/SqlServer/SqlServerUtils.cs index 71575122..ac804a63 100644 --- a/FreeSql/SqlServer/SqlServerUtils.cs +++ b/FreeSql/SqlServer/SqlServerUtils.cs @@ -11,6 +11,8 @@ namespace FreeSql.SqlServer { public SqlServerUtils(IFreeSql orm) : base(orm) { } + internal bool IsSelectRowNumber = true; + internal override DbParameter AppendParamter(List _params, string parameterName, Type type, object value) { if (string.IsNullOrEmpty(parameterName)) parameterName = $"p_{_params?.Count}"; else if (_orm.CodeFirst.IsSyncStructureToLower) parameterName = parameterName.ToLower();