通过ODBC在Linux上连接到MSSQL

connect to mssql on linux via odbc

本文关键字:连接 MSSQL Linux ODBC 通过      更新时间:2023-10-16

i连接了mssql(在Windows上)通过Linux Redhat 64bit上的ODBC。
以下是ODBC和Freetds配置文件。

freetds.conf

[FreeTDS]  
host=172.21.32.20  
port=1433  
tds version=7.2  
client charset = GB2312   

odbcinst.ini

[TDS]  
Description = TDS  
Driver = /usr/local/lib/libtdsodbc.so  
Trace = Yes  
TraceFile=/tmp/odbcinst.log  
UsageCount = 1  

odbc.ini

[SQLSERVER]  
Driver = TDS  
Description = sql server dsn  
Trace = NO  
Server = 172.21.32.20  
Database = Live  
Port = 1433  
TDS_Version = 7.2  
TraceFile=/tmp/sqlserver.log  

摘要:

QString f3ErpDsn = QString::fromLocal8Bit("Driver={SQLSERVER};server=172.21.32.20;database=Live;uid=inp;pwd=inp;");
QSqlDatabase f3ErpDb= QSqlDatabase::addDatabase("QODBC");
f3ErpDb.setDatabaseName(f3ErpDsn);
// f3ErpDb.setDatabaseName("SQLSERVER");
f3ErpDb.setUserName("inp");
f3ErpDb.setPassword("inp");
QString sqlCmdStr = "select * from dbo.Table_Drilling_Data01 where status=1";
if ( ! f3ErpDb.open() )
{
        qDebug() << f3ErpDb.lastError().text();
        return 1;
}
QSqlTableModel model;
model.setTable("dbo.Table_Drilling_Data01");
model.setFilter("status=3");
model.select();
qDebug() << model.lastError().text();

错误消息:

  1. f3ErpDb.setDatabaseName(f3ErpDsn);
    如果setDatabaseNamef3ErpDsn错误消息是:

    " QODBC3:无法连接"," [UNIXODBC] [驱动程序管理器]找不到数据源名称,没有指定默认驱动程序")

    我在odbc.ini中定义了sqlserver。为什么找不到它?

  2. 但是,如果我更改了f3ErpDb.setDatabaseName("SQLSERVER");,则错误消息为:

    " [freetds] [SQL Server]输入表格数据流(TDS)远程过程调用(RPC)协议流不正确。参数1("):数据类型0x00是未知的。QODBC3:QODBC3:无法执行语句"

这让我感到困惑,有人可以帮助我吗?

我不确定qsqldatabase是什么。但是看来您的SQL连接字符串不正确。

尝试这样的事情:

UID=inp;PWD=inp;DSN=SQLSERVER;database=Live;SERVER=AMINSQLEXPRESS;charset=UTF-8

DSN=SQLSERVER,因为 SQLSERVERodbc.ini

中唯一定义的DSN

SERVER=AMINSQLEXPRESS-尝试SQL Server的Windows名称,而不是主机的IP地址(我不确定此处不允许IP,但Windows名称是100%工作的)

我也有相同的问题,当我将TDS协议更改为8.0时,我就解决了它,在7.0之前。我已经通过QT使用了freetds,unixoDBC来连接到MSSQL数据库。