标签: freetds

"Adaptive Server不可用或不存在"错误从PHP连接到SQL Server

我正在尝试使用unixODBC和FreeTDS从我的Mac连接到SQL Server 2005数据库,如我在此处所述.但是,当我尝试使用相同的设置连接到不同的数据库时,我得到:

Connection Failed:[FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist.
Run Code Online (Sandbox Code Playgroud)

这是我的freetds.conf设置:

[my_db]
host = 12.34.56.789
port = 1433
tds version = 8.0
Run Code Online (Sandbox Code Playgroud)

这是我的odbc.ini:

[my_dsn]
Driver = /opt/local/lib/libtdsodbc.so
Description = My Database
Trace = no
Servername = my_db
Database = MyDB

[ODBC Data Sources]
my_dsn = FreeTDS
Run Code Online (Sandbox Code Playgroud)

我仍然可以连接到我在这台计算机上设置的其他数据库(在我上面链接的博客文章中描述),所以我很确定错误不在Mac端.我已在服务器上验证我正在使用正确的IP地址和端口.关于什么可能是问题的任何想法,以及它是否在服务器端?

php sql-server sql-server-2005 unixodbc freetds

36
推荐指数
5
解决办法
9万
查看次数

将FreeTDS交叉编译到iPhone

由于这个问题没有答案,我花了大部分时间来计算它,我想我会发布如何将FreeTDS 0.91交叉编译为iPhone ARMv6,ARMv7架构.这是使用Xcode 4.2和iOS 5 SDK完成的.

之所以要问这个问题,是因为您正在为需要连接到Mircosoft SQL Sever的iOS设备开发应用程序,这需要使用Tabular Data Stream(TDS)协议,因为它是Microsoft专有的.

我还要提到你需要一定程度的技术才能尝试这一点.这是我花了将近两个月才弄明白的一个非常简洁的版本(我留下了你不应该做的所有事情).

与此有关的其他文件:

基本如何使用FreeTDS http://www.freetds.org/userguide/samplecode.htm

Microsoft的TDS API文档 http://msdn.microsoft.com/en-us/library/aa936985(v=sql.80)

请参阅下面的答案.

另请参阅saskathex回答Xcode 4.5更新的文件.

iphone cross-compiling freetds ios xcode4.2

32
推荐指数
1
解决办法
3908
查看次数

SqlAlchemy相当于使用FreeTDS的pyodbc连接字符串

以下作品:

import pyodbc
pyodbc.connect('DRIVER={FreeTDS};Server=my.db.server;Database=mydb;UID=myuser;PWD=mypwd;TDS_Version=8.0;Port=1433;')
Run Code Online (Sandbox Code Playgroud)

以下失败:

import sqlalchemy
sqlalchemy.create_engine("mssql://myuser:mypwd@my.db.server:1433/mydb?driver=FreeTDS& odbc_options='TDS_Version=8.0'").connect()
Run Code Online (Sandbox Code Playgroud)

上面的错误消息是:

DBAPIError :(错误)('08001','[08001] [unixODBC] [FreeTDS] [SQL Server]无法连接到数据源(0)(SQLDriverConnectW)')无无

有人可以指点我正确的方向吗?有没有办法告诉sqlalchemy将特定的连接字符串传递给pyodbc?

请注意:我希望保持此DSN-less.

python sql-server sqlalchemy pyodbc freetds

26
推荐指数
4
解决办法
3万
查看次数

FreeTDS工作,但ODBC无法连接

我正在尝试使用FreeTDS和unixODBC从Ubuntu 12.04网络服务器连接到MSSQL服务器.

使用tsql我可以连接到服务器

~$ tsql -S dbs3 -U <username> -P <password>
Run Code Online (Sandbox Code Playgroud)

没问题.

当我尝试连接isql时,我收到以下错误消息:

~$ isql -v database3 <username> <password>
[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[01000][unixODBC][FreeTDS][SQL Server]Unknown host machine name.
[ISQL]ERROR: Could not SQLConnect
Run Code Online (Sandbox Code Playgroud)

我的配置文件如下:

ODBC.INI

[database3]
Driver=FreeTDS
TDS_Version=8.0
Servername=dbs3
Port=1433
Database=benchmark_res
Run Code Online (Sandbox Code Playgroud)

ODBCINST.INI

[FreeTDS]
Description=FreeTDS v0.91
Driver=/usr/local/lib/libtdsodbc.so
Setup=/usr/local/lib/libtdsS.so
Trace=Yes
TraceFile=/tmp/freetds.log
ForceTrave=Yes
UsageCount=1
Run Code Online (Sandbox Code Playgroud)

freetds.conf

# This file is installed by FreeTDS if no file by the same
# name is found in the installation directory.
#
# For information about …
Run Code Online (Sandbox Code Playgroud)

sql-server odbc freetds isql ubuntu-12.04

22
推荐指数
2
解决办法
3万
查看次数

PDO与MSSQL驱动程序如何获取输出参数?

当您使用PDOMSSQL的驱动程序,你实际使用freetds的低级别的驱动程序.执行存储过程有一些不同的方法 - 语言查询RPC调用.

FreeTDS还支持TDS协议版本4.2和7.x. 它们之间的主要区别之一是存储过程调用的行为.Microsoft将协议4.2中的行为更改为7.0,而不是从语言查询返回输出参数.语言查询主要将文本查询发送到包装到TDS包中的服务器.

使用PDO进行语言查询的示例(来自php.net)

    $stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)");
    $value = 'Hello!';
    $stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 
    $stmt->execute();
    print "The output is $value\n";
Run Code Online (Sandbox Code Playgroud)

实际上你发送的东西就像"EXEC sp_takes ....".如果您使用MSSQL运行上面的示例,您将获得TDS7.х中的空输出参数和4.2的预期结果.为什么我们不能使用4.2并且开心?它有很多局限性:

  • 当然只有ASCII.
  • 不支持RPC和BCP.
  • varchar字段限制为255个字符.如果您的表定义了更长的字段,它们将被截断.
  • prepared statements不支持动态查询(也称为).

所以,4.2不是变种.

RPC调用示例(来自php.net odbtp扩展)

    $stmt = mssql_init('sp_takes_string_returns_string');
    $value = 'Hello!';
    mssql_bind($stmt, 1, $value, SQLVARCHAR, true,  false,   4000);
    mssql_execute($stmt);
    print "The output is $value\n";
Run Code Online (Sandbox Code Playgroud)

使用上面的示例和php中的本机mssql扩展,您可以使用TDS 7.2获得正确的结果.实际上,您使用该代码发送二进制RPC数据包.

是否有任何方法可以使用PDO和MSSQL驱动程序对存储过程进行RPC调用?

php sql-server pdo freetds

21
推荐指数
1
解决办法
2878
查看次数

使用PHP FreeTDS扩展从MSSQL服务器获取UTF-8字符集的数据

我似乎无法使用FreeTDS扩展从MSSQL编码为UTF-8的数据.

连接:

ini_set('mssql.charset', 'UTF-8');
$this->_resource = mssql_connect($config['servername'], $config['username'], $config['password']);
Run Code Online (Sandbox Code Playgroud)

我无法使用任何其他扩展程序.

我试过创建〜/ .freetds.conf

[global]
client charset = UTF-8
Run Code Online (Sandbox Code Playgroud)

我已经尝试将参数传递给php:

php -d mssql.charset="UTF-8" index.php
Run Code Online (Sandbox Code Playgroud)

数据仍然不是UTF-8.

php -i

mssql

MSSQL Support => enabled
Active Persistent Links => 0
Active Links => 0
Library version => FreeTDS

Directive => Local Value => Master Value
mssql.allow_persistent => On => On
mssql.batchsize => 0 => 0
mssql.charset => no value => no value
mssql.compatability_mode => Off => Off
mssql.connect_timeout => 5 => 5
mssql.datetimeconvert => On …
Run Code Online (Sandbox Code Playgroud)

php sql-server utf-8 freetds

19
推荐指数
4
解决办法
7万
查看次数

Pypyodbc:尝试连接SQL Server时无法打开lib'FreeTDS':找不到文件")错误

我正在尝试使用Mac上的Pypyodbc连接到SQL Server,我收到以下错误:

pypyodbc.DatabaseError: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'FreeTDS' : file not found")
Run Code Online (Sandbox Code Playgroud)

我已经安装了freeTDS和unixodbc

brew install unixodbc
brew install freetds
Run Code Online (Sandbox Code Playgroud)

这是我的连接字符串与虚拟数据:

connection_String = "Driver=FreeTDS;Server=123.12.12.12;tds_version=7.2;Database=db_db;Uid=username:pwd=password:port=1433"
Run Code Online (Sandbox Code Playgroud)

python sql-server macos freetds pypyodbc

19
推荐指数
2
解决办法
2万
查看次数

freeTDS没有使用它的配置

我决定使用FreeTDS驱动程序和unixODBC来管理基于LAMP的应用程序与远程MsSQL数据库之间的PDO连接.不幸的是,驱动程序似乎没有读取freetds.conf文件,也没有直接通过服务器的CLI设置或通过putenv()函数在php文件中指定的环境变量.

现在一些数据:

  1. 当我ping服务器时 - 没有数据包丢失.
  2. 当我在1433端口上telnet服务器时 - 建立连接
  3. 因为我使用命令

    TDSVER=7.0 tsql -H >IP< -p 1433 -U username
    
    Run Code Online (Sandbox Code Playgroud)

    系统提示我输入密码并建立连接.

  4. 没有命令前面的TDSVER - 连接失败并显示以下消息:

    Error 20017 (severity 9):
        Unexpected EOF from the server
        OS error 115, "Operation now in progress"
    Error 20002 (severity 9):
        Adaptive Server connection failed
    There was a problem connecting to the server
    
    Run Code Online (Sandbox Code Playgroud)
  5. tsql -C命令回声这样的输出:

    Compile-time settings (established with the "configure" script)
                           Version: freetds v0.91
            freetds.conf directory: /usr/local/etc
    MS db-lib source compatibility: yes
       Sybase binary compatibility: no
                     Thread safety: yes …
    Run Code Online (Sandbox Code Playgroud)

linux sql-server freetds ubuntu-10.04

18
推荐指数
3
解决办法
5万
查看次数

PDO DBLIB多字节(中文)字符编码 - SQL服务器

在Linux机器上,我使用PDO DBLIB连接到MSSQL数据库并在SQL_Latin1_General_CP1_CI_AS表中插入数据.问题是,当我尝试插入中文字符(多字节)时,它们被插入为哈市香åŠåŒºç æ±Ÿè·¯å·.

我的(部分)代码如下:

$DBH = new PDO("dblib:host=$myServer;dbname=$myDB;", $myUser, $myPass);

$query = "
    INSERT INTO UserSignUpInfo
    (FirstName)
    VALUES
    (:firstname)";

$STH = $DBH->prepare($query);

$STH->bindParam(':firstname', $firstname);
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的:

  1. 这样做mb_convert_encodingUTF-16LE$firstname和CAST作为VARBINARY像查询:

    $firstname = mb_convert_encoding($firstname, 'UTF-16LE', 'UTF-8');

    VALUES
    (CAST(:firstname AS VARBINARY));
    
    Run Code Online (Sandbox Code Playgroud)

    这导致正确插入字符,直到有一些非多字节字符,这会破坏PDO执行.

  2. 将我的连接设置为utf8:

    $DBH = new PDO("dblib:host=$myServer;dbname=$myDB;charset=UTF-8;", $myUser, $myPass);
    $DBH->exec('SET CHARACTER SET utf8');
    $DBH->query("SET NAMES utf8");
    
    Run Code Online (Sandbox Code Playgroud)
  3. client charset在我的freetds.conf中设置为UTF-8

    哪个没有影响.

有没有办法在该SQL数据库中插入多字节数据?还有其他解决方法吗?我曾经想过尝试PDO ODBC甚至是mssql,但是在浪费时间之前最好先问一下这个问题.

提前致谢.

编辑:

我最终使用MSSQLN数据类型前缀.当我有更多时间时,我会换掉并尝试PDO_ODBC.谢谢大家的答案!

sql-server pdo character-encoding freetds multibyte

16
推荐指数
1
解决办法
4138
查看次数

Debian Linux上的pyodbc/FreeTDS/unixODBC:TDS版本的问题

我在Debian Lenny(5.0.7)上成功使用pyodbc时遇到了一些麻烦.具体来说,我似乎无法获取NVARCHAR值(不是SQL Server专家,所以对我很容易:)).

大多数传统查询都可以.例如,table1中的行数产生

cursor.execute("SELECT count(id) from table1")
<pyodbc.Cursor object at 0xb7b9b170>
>>> cursor.fetchall()
[(27, )]
Run Code Online (Sandbox Code Playgroud)

就像完全转储ID一样

>>> cursor.execute("SELECT id FROM table1")
<pyodbc.Cursor object at 0xb7b9b170>
>>> cursor.fetchall()
[(0.0, ), (3.0, ), (4.0, ), (5.0, ), (6.0, ), (7.0, ), (8.0, ), (11.0, ), (12.0, ), (18.0, ), (19.0, ), (20.0, ), (21.0, ), (22.0, ), (23.0, ), (24.0, ), (25.0, ), (26.0, ), (27.0, ), (28.0, ), (29.0, ), (32.0, ), (33.0, ), (34.0, ), (35.0, ), (36.0, ), …
Run Code Online (Sandbox Code Playgroud)

unixodbc pyodbc freetds sql-server-2008

15
推荐指数
3
解决办法
4202
查看次数