NETCORE 在LINUX下的DOCKER容器中连接早期的SQL SERVER数据库的问题和解决方案

本文讲述了在Linux Docker环境中,.NET Core应用程序遇到连接旧版SQL Server的问题及解决方案。由于微软的sqlclient只支持2008R2 sp3及以上版本,作者探讨了使用ODBC和FreeTDS或ODBC Driver 17的两种方法,详细介绍了在不同Docker镜像上的安装和配置过程。
摘要由CSDN通过智能技术生成

 

1、引子

     之前因为把自己的netcore程序部署到docker中运行,由于程序需要连接客户的数据库,比如本文中提到的客户的sql server数据,但是无法确定客户使用的是哪个sql server版本,必须要做到能适配多种数据库。

    为了实现这个功能,程序采用了 FreeSQL作为数据服务器的访问框架,可通过配置来适配多种数据库,之前在开发环境下已经适配了oracle、mysql、postgresql、sqlserver,在某些地方部署后,程序运行正常,能正常连接sqlserver数据库。

    但是近期一个新客户需要部署程序,对方采用的sqlserver版本不详,部署了程序并运行时,提示无法连接到数据库了,提示的错误如下:

Connection Timeout Expired. The timeout period elapsed during the-login phase. 
The connection could have timed out while waiting for server to complete the 
login process and respond; Or it could have timed out while attempting to 
create multiple active connections. The duration spent while attempting to 
connect to this server was - [Pre-Login] initialization=23; handshake=143; 
[Login] initialization=2; authentication=7; [Post-Login] complete=14021;

2、溯源

    在经过多方偿试和搜索后,发现是微软的坑,linux版的sqlclient只支持连接 sqlserver 2008R2 sp3及以上版本的数据库服务,客户所用的数据库很有可能是低于这个版本,这个是硬伤,不可能让客户去升级数据库服务器,临时办法只能是先把程序部署到windows服务器。

Github issue

   但是因为程序已经全面容器化部署,不能一个程序单独搞一台windows服务器,问题总还是要解决的,所以就踏上了寻找解决问题的道路上了。

3、解决方案

   经过资料查询,要想在linux下连接低版本的sql server只能使用odbc驱动来连接服务器,主要有两种方案,一种是是 odbc配合freetds,另外一种是 odbc配合 ODBC Driver 17 for SQL Server,大概颥要的程序如下:

(1)、unixODBC : 通用的ODBC接口服务

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值