【问题标题】:connect to mssql on linux via odbc通过 odbc 连接到 linux 上的 mssql
【发布时间】: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();

错误信息:

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

    “QODBC3:无法连接”、“[unixODBC][驱动管理器]找不到数据源名称,也没有指定默认驱动”)

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

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

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

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

【问题讨论】:

    标签: c++ sql-server odbc


    【解决方案1】:

    我不确定 QSqlDatabase 是什么。但似乎您的 SQL 连接字符串不正确。

    试试这样的:

    UID=inp;PWD=inp;DSN=SQLSERVER;database=Live;SERVER=AMIN\SQLEXPRESS;charset=UTF-8
    

    DSN=SQLSERVER 因为SQLSERVER 是您的odbc.ini 中定义的唯一DSN

    SERVER=AMIN\SQLEXPRESS - 尝试 SQL Server 的 Windows 名称,而不是主机的 IP 地址(我不确定此处是否允许 IP,但 Windows 名称 100% 有效)

    【讨论】:

    • 但此代码在 Windows 上运行成功。我通过freetds完美地连接了数据库。
    • 嗯,您能提供您的 Windows ODBC 设置吗?你看,当你写“Driver={SQLSERVER};server=172.21.32.20;database=Live;uid=inp;pwd=inp;”的时候,根本不提供DSN,所以不使用odbc。 ini 设置。另一方面,您没有在 odbcinst.ini 中指定名为 SQLSERVER 的驱动程序,因此您的连接字符串将不起作用。在连接字符串中指定 DSN=SQLSERVER 或 Driver={TDS}
    • ------------- ODBCINST.ini ------------- [SQL Server (32 λ)] \n Driver=C :\WINDOWS\system32\sqlsrv32.dll Setup=C:\WINDOWS\system32\sqlsrv32.dll 32Bit=1 ODBC.INI文件中没有关于sqlserver的设置。
    • 顺便问一下,你知道如何在评论中创建新行吗?当我按“Enter”键时,它会保存评论。
    • 有人知道吗?我的 odbc 驱动程序问题
    【解决方案2】:

    我遇到了同样的问题,当我将 TDS 协议更改为 8.0 时解决了它,之前是 7.0。我已经通过 Qt 使用 freetds、unixodbc 连接到 MSSQL 数据库。

    【讨论】:

      猜你喜欢
      • 2013-12-08
      • 1970-01-01
      • 2013-06-09
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      相关资源
      最近更新 更多