通过ODBC在Linux上连接到MSSQL
connect to mssql on linux via odbc
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();
错误消息:
f3ErpDb.setDatabaseName(f3ErpDsn);
如果setDatabaseName
是f3ErpDsn
错误消息是:" QODBC3:无法连接"," [UNIXODBC] [驱动程序管理器]找不到数据源名称,没有指定默认驱动程序")
我在odbc.ini中定义了sqlserver。为什么找不到它?
但是,如果我更改了
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
,因为 SQLSERVER
是 odbc.ini
SERVER=AMINSQLEXPRESS
-尝试SQL Server的Windows名称,而不是主机的IP地址(我不确定此处不允许IP,但Windows名称是100%工作的)
我也有相同的问题,当我将TDS协议更改为8.0时,我就解决了它,在7.0之前。我已经通过QT使用了freetds,unixoDBC来连接到MSSQL数据库。
- 当套接字连接断开时检测C/C++Unix
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在 libcurl 连接池中预创建连接
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- libcurl 和 DNS ttl 中的内部连接管理
- 如何应用 libcurl 的持久连接选项
- 提升 ASIO - io_service 不要等待连接到线程
- WinSock2:connect() 提供"连接被拒绝"
- 升压信号2将插槽传递到成员功能以断开连接