【发布时间】:2012-10-29 14:04:31
【问题描述】:
我在 linux redhat 64bit 上通过 odbc 连接了 MSSQL(在 Windows 上)。
下面是 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:无法执行语句“
这让我很困惑,有人可以帮助我吗?
【问题讨论】:
标签: c++ sql-server odbc