DotNetNext / SqlSugar

.Net aot ORM Fastest ORM Simple Easy VB.NET Sqlite orm Oracle ORM Mysql Orm 虚谷数据库 postgresql ORm SqlServer oRm 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET5 ORM .NET6 ORM ClickHouse orm QuestDb ,TDengine ORM,OceanBase orm,GaussDB orm ,Tidb orm Object/Relational Mapping
https://www.donet5.com/Home/Doc
MIT License
5.17k stars 1.32k forks source link

SqlSugar 使用 ODBC 连接 SQL Server 2008 , 使用GetPageListAsync 、 AsUpdateable 出错 #1259

Closed Yoodanet closed 1 week ago

Yoodanet commented 1 week ago
  1. 使用GetPageListAsync 错误: ERROR [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]接近 'OFFSET' 之處的語法不正確。 ERROR [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]接近 'OFFSET' 之處的語法不正確。[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]FETCH 陳述式中的選項 NEXT 使用方式無效。”

  2. 使用repo.AsUpdateable().SetColumns(it => it.name== "test").Where(it => it.id == 1).ExecuteCommandAsync() 出错: ERROR [42S02] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]無效的物件名稱 'DUAL'。

已经设置MoreSettings 参数 DatabaseModel=DbType.SqlServer。

请问SqlSugar 只能使用原生SQL脚本来查询分页和其他操作吗?谢谢!

DotNetNext commented 1 week ago

为什么要用ODBC连sqlserver 。。最近 怎么都流行ODBC了,我想办法支持一下

Yoodanet commented 1 week ago

为什么要用ODBC连sqlserver 。。最近 怎么都流行ODBC了,我想办法支持一下

嗯,目前部署使用的是Docker,但是目标数据库是SQL Server2008 R2 SP1 , Docker 最低支持 SQL Server 2008 R2 SP3。数据库服务器无法安装SP3,只能转而求其次使用 ODBC 了。我下午测试了一下,发现了伤处错误。如果能有API 支持是最好了的。感谢!!!

DotNetNext commented 1 week ago

过五分钟后更新到这个版本 SqlSugar.OdbcCore 5.1.4.161

//程序启动时加上这句话
OdbcConfig.IsCompatibleWithOldDatabaseVersion = true;
Yoodanet commented 1 week ago

过五分钟后更新到这个版本 SqlSugar.OdbcCore 5.1.4.161

//程序启动时加上这句话
OdbcConfig.IsCompatibleWithOldDatabaseVersion = true;

这速度,不得了了啊!感谢!!!

Yoodanet commented 1 week ago

加上上面上面那句话之后,我启动程序出错了。 我项目中使用了AutoMapper,然后我在Program.cs 注册服务,就报错了。 public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args);

        // SqlSugar 处理 ODBC 连接 SQL Server 2008 R2 等老数据库使用API出错的问题
        OdbcConfig.IsCompatibleWithOldDatabaseVersion = true;

        // 下面这段代码开始出错了
        builder.Services.AddAutoMapper(System.AppDomain.CurrentDomain.GetAssemblies());
    }

错误信息如下: System.Reflection.ReflectionTypeLoadException:“Unable to load one or more of the requested types.”

麻烦在帮助查看一下,谢谢!

DotNetNext commented 1 week ago

这一行代码不会影响注入

DotNetNext commented 1 week ago

是不是你安装有的问题

DotNetNext commented 1 week ago

清空解决方案,保证每个DLL都是最新

DotNetNext commented 1 week ago

要不就写到AddAutoMapper下面

Yoodanet commented 1 week ago

我把 SqlSugarCore 升级到了 5.1.4.160 ,重新build 后就没错了。谢谢!

Yoodanet commented 1 week ago

现在GetPageListAsync可以正确拿到数据了,但是 .AsUpdateable().SetColumns(it => it.name == "test").Where(it => it.id== 1).ExecuteCommandAsync() 返回错误: ERROR [42S02] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]無效的物件名稱 'DUAL'。

请再次帮助查看,谢谢!辛苦了!!!

DotNetNext commented 1 week ago

SqlSugar.OdbcCore 5.1.4.162 更新到这个版本,还有疑问看生成的SQL是什么的。

Yoodanet commented 1 week ago

升级之后已经可以正确进行数据更新操作了。非常感谢!!!

DotNetNext commented 1 week ago

还有问题发新贴,这个就关闭了