.net core连接Liunx上MS SQL Server
场景
由于业务要求,需要对甲方的一个在 SQL Server 上的财务表进行插入操作。研究了半天,因为一个小问题折腾了很久。
过程
.net core 端:
1. 利用 EF, 就需要的导入相关的 Nuget 包,这里选用:Microsoft.EntityFrameworkCore.SqlServer
2. 建立 SQL Server 的上下文
public class SQLContext : DbContext { public SQLContext(DbContextOptions<SQLContext> options) : base(options) { }</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">virtual</span> DbSet<TB_Sample_COD> TB_Sample_COD {<span style="color: rgba(0, 0, 255, 1)">get</span>;<span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">; }
}
3. 在 StartUp 中将上下文加到依赖注入中,通过配置文件中的连接字符串:
"SQLContext": "Data Source=XXX.XX.XXX.XXX,1433;Initial Catalog=Test;User=SA;Password=XXXXXXX"
这里连接字符串的具体格式可以参考 SQL Server 的官方教程:https://www.connectionstrings.com/microsoft-data-sqlclient/
比如用 SQL Server2019 中,Data Source:< 服务器地址 >,< 端口 >;用户:SA(默认用户,应该不区分大小写);Password:创建时输入的密码
StartUp 文件中 ConfigureServices 中加入一下代码:
services.AddDbContext<SQLContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SQLContext")));
这里 UseSqlServer() 和 Microsoft.EntityFrameworkCore.SqlServer 的版本有关。
liunx 端:
4.Liunx 上安装 SQL Server,,与其看网上搬来搬去的教程(大部分就是官方教程抄过去的),还不如推荐去官方教程:https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-setup?view=sql-server-ver15
大概流程就是:
sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo
// 安装 mssql-tools
sudo yum install -y mssql-tools unixODBC-devel
// 配置路径
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
最后检验登录:
sqlcmd -S localhost -U SA -P '<YourPassword>'
5. 开启端口
SQL Server 默认端口 1433。在 /etc/sysconfig/iptables 中添加代码如下:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1433-j ACCEPT
查看结果,哪些端口开着:
netstat -anp
最后,用阿里,腾讯等云服务器一定要开放端口!!!(这浪费了我半天时间,以为需要安装和配置 freeTDS,后来发现是用于 c/c++ 在 liunx 上对其他平台的 MS SQL Server 进行操作。)
Navicat:
6. 连接远程 SQL Server
顺便介绍一种 navicat 用 SSH 连接 SQL 数据库的方式,官方的 SQL Server Manager Studio 没有的功能,相当于在服务器上的本地连接 SQL
主机为远程服务器的 ip 地址,用户和密码为连接服务器的用户密码。
这里的主机可以是 localhost,用户密码是 SQL Server 数据库的用户密码。
这样连接可以说明远程服务器的本地 SQL 数据库是可以登录访问的。
最后
记得在云服务器中添加端口规则,气。(主要是我以为甲方应该开放这个端口了)