我正在使用ArchLinux,我正在尝试安装OpenEdge进度驱动程序,以便我可以通过PHP访问它.我已经安装了unixodbc软件包和驱动程序,但是当我通过isql或PHP测试连接时,我得到了同样的错误......
# isql -3 SUBS2A
[01000][unixODBC][Driver Manager]Can't open lib '/usr/dlc/odbc/lib/pgoe1023.so' : file not found
[ISQL]ERROR: Could not SQLConnect
Run Code Online (Sandbox Code Playgroud)
混乱的事情是"/usr/dlc/odbc/lib/pgoe1023.so"目前存在,我甚至从"/ usr/dlc"中对它进行了符号链接.
以下是我的.ini文件......
ODBC.INI
[SUBS2A]
Description = ODBC Driver for Progress
Driver = /usr/dlc/odbc/lib/pgoe1023.so
FileUsage = 1
Run Code Online (Sandbox Code Playgroud)
odbcinst.ini(我删除了一些凭据,因为它无关紧要)
[ODBC-test]
Description = SUBS2A
Driver = SUBS2A
Server = 192.168.1.2
Port = 4000
APILevel=1
ConnectFunctions=YYN
CPTimeout=60
DriverODBCVer=03.60
FileUsage=0
SQLLevel=0
UsageCount=1
ArraySize=50
DefaultLongDataBuffLen=2048
DefaultIsolationLevel= READ COMMITTED
StaticCursorLongColBuffLen=4096
Run Code Online (Sandbox Code Playgroud)
编辑添加更多信息......
他们似乎都是32位,除了我不知道我在做什么.
[root@Crux etc]# file /usr/bin/isql
/usr/bin/isql: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically …Run Code Online (Sandbox Code Playgroud) 我正在尝试弄清楚当连接到Linux上的MS-SQL服务器时,这两个拼图是如何交互在一起的.
据我了解,FreeTDS是用于与MS-SQL交谈的协议(即一组规则),它实际上是在进行交谈.Unixodbc是一个实现ODBC API的驱动程序,即我实现了一组函数.
为什么两件事都必要?任何人都可以详细说明我对这两件事实际做了什么的粗略理解吗?
有没有办法使用Windows Domain Credentials在Linux上使用python连接到MS SQL Server数据库?
我可以使用Windows凭据从我的Windows机器上完美地连接,但尝试使用pyodbs + freetds + unixodbc从linux python中做同样的事情
>>import pyodbc
>>conn = pyodbc.connect("DRIVER={FreeTDS};SERVER=servername;UID=username;PWD=password;DATABASE=dbname")
Run Code Online (Sandbox Code Playgroud)
导致此错误:
class 'pyodbc.Error'>: ('28000', '[28000] [unixODBC][FreeTDS][SQL Server]Login incorrect. (20014) (SQLDriverConnectW)')
Run Code Online (Sandbox Code Playgroud)
我确定密码写得正确,但我尝试了很多不同的用户名组合:
DOMAIN\username
DOMAIN\\username
Run Code Online (Sandbox Code Playgroud)
甚至
UID=username;DOMAIN=domain
Run Code Online (Sandbox Code Playgroud)
无济于事.有任何想法吗?
我在Ubuntu 10.04 Lucid LTS上使用以下软件堆栈来连接数据库:
eb545758079a743b2e809e2e219c8848bc6256b2尝试在SQL SERVER函数的参数中执行本机参数绑定时出现此错误:
Traceback (most recent call last):
File "/home/nosklo/devel/testes/sqlfunc.py", line 32, in <module>
cur.execute("SELECT * FROM fn_FuncTest(?)", ('test',))
pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS][SQL
Server]SqlDumpExceptionHandler: Process 54 generated fatal exception
c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this
process.\r\n (0) (SQLPrepare)')
Run Code Online (Sandbox Code Playgroud)
这是再现代码:
import pyodbc
constring = 'server=myserver;uid=uid;pwd=pwd;database=db;TDS_Version=8.0;driver={FreeTDS}'
con = pyodbc.connect(constring)
print 'VERSION: ', con.getinfo(pyodbc.SQL_DBMS_VER)
cur = con.cursor()
try:
cur.execute('DROP FUNCTION fn_FuncTest')
con.commit()
print "Function …Run Code Online (Sandbox Code Playgroud) 我一直无法找到记录的方法来为实际工作的初始连接设置超时。我不是在问“查询超时”,而是在数据库服务器完全关闭或无法访问的情况下初始连接尝试的超时,并且根本没有响应。默认情况下,此类连接似乎在 255 秒后超时 - 有没有办法设置更短的超时?
编辑:为清楚起见,我应该在这里重申堆栈:
CENTOS 6.5 x86_64 WHM 11.42.1 unixODBC 2.2.14
我试图连接到远程MSSQL服务器但没有成功 - 也尝试连接不同的tds版本(4.2,7.0,7.1,8.0),但都给出了相同的结果.
使用相同的服务器名称,端口,用户名和密码,我可以使用Win7和SQL Server Management Studio通过我的桌面进行连接.
Telnet也失败了.
细节如下.如果您需要,请告诉我.所有帮助/建议表示赞赏.
========
Compile-time settings (established with the "configure" script)
Version: freetds v0.91
freetds.conf directory: /etc
MS db-lib source compatibility: yes
Sybase binary compatibility: yes
Thread safety: yes
iconv library: yes
TDS version: 4.2
iODBC: no
unixodbc: yes
SSPI "trusted" logins: no
Kerberos: yes
Run Code Online (Sandbox Code Playgroud)
========
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF8"
20Error …Run Code Online (Sandbox Code Playgroud) 我已经阅读了有关该文件odbc.ini和Vertica文档的iODBC 文档.我也看到了一个带有相同错误的问题,但无法让连接字符串按照上一个问题的答案中的建议工作.
我目前拥有的:
/etc/odbcinst.ini
[HPVertica] Description = HP Vertica ODBC Driver Driver = /opt/vertica/lib64/libverticaodbc.so
/etc/odbc.ini
[ODBC Data Sources] VerticaDB1 = db1 database on HP Vertica [VerticaDB1] Description = db1 database on HP Vertica Driver = HPVertica Database = db1 Servername = 10.0.0.67 UID = dbadmin PWD = Port = 5433 Locale = en_GB [ODBC] Threading = 1
~/.odbc.ini
[DEFAULT] Driver = VerticaDB1
测试用 isql
[root@ip-10-0-0-67 /]# echo "select 1;" | isql …
我想从我的测试脚本进行数据迁移mssql-server到oracle server.为此,我必须pyodbc python为Ubuntu安装包,它具有依赖性unixodbc.当我尝试安装unixodbc-dev使用时:
sudo apt-get install unixodbc-dev
Run Code Online (Sandbox Code Playgroud)
它给出了破坏的包错误:
The following packages have unmet dependencies:
unixodbc-dev : Depends: unixodbc (= 2.3.1-4.1)
Depends: odbcinst1debian2 (= 2.3.1-4.1) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
Run Code Online (Sandbox Code Playgroud)
但是使用aptitude(sudo aptitude install unixodbc-dev)它正在安装并删除一些SQL服务器文件,因为我的文件SQL-server发生故障.
再次SQL server使用此命令安装:
sudo apt-get install mssql-server mssql-tools …Run Code Online (Sandbox Code Playgroud) 当我跑步时
$ python manage.py inspectdb --database=mssql_database
我有以下错误
django.db.utils.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.9.so.1.1' : file not found (0) (SQLDriverConnect)")
Run Code Online (Sandbox Code Playgroud)
但文件libmsodbcsql-17.9.so.1.1就在那里。
$ cat /etc/odbcinst.ini
[ODBC]
Trace=Yes
TraceFile=/tmp/odbc.log
[FreeTDS]
Description=TDS driver (Sybase/MS SQL)
Driver=libtdsodbc.so
Setup=libtdsS.so
CPTimeout=
CPReuse=
UsageCount=2
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.9.so.1.1
UsageCount=1
$ odbcinst -j
unixODBC 2.3.7
odbcinst: symbol lookup error: odbcinst: undefined symbol: odbcinst_system_file_name
$ ldd /opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.9.so.1.1
linux-vdso.so.1 (0x00007fff545c4000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9f85470000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 …Run Code Online (Sandbox Code Playgroud) 我想使用连接到Oracle(11g)unixODBC.我希望连接字符串只能指定所有数据库/数据源信息,而ODBC INI文件(/etc/odbc.ini和/etc/odbcinst.ini)只包含通用驱动程序信息,比如在哪里找到'.so'等等,即我希望它们是静态的.我想这样做,以便我可以从外部获取用户的连接字符串,并连接到数据源,而无需修改任何INI文件或任何其他磁盘配置.
我看到的所有示例都让我/etc/odbc.ini像这样定义服务器信息:
[myDSNname]
Driver = OracleODBC-11g
DSN = OracleODBC-11g
ServerName = //xxx.xxx.xxx.xxx:1521/SID_NAME
UserID = my_user
Password = my_pass
Run Code Online (Sandbox Code Playgroud)
现在,我想出了如何通过添加"UID=my_user;PWD=my_pass"到连接字符串将UserID和密码输出到连接字符串中,然后将其从中删除odbc.ini.当我无法找到ServerName离开odbc.ini和进入连接字符串的方式时,我的快乐很快就过去了.那我该怎么做?有没有办法odbc.ini彻底摆脱DSN,只有连接字符串中的Driverfrom odbcinst.ini,就像我们为MySQL做的那样?
编辑:
尝试任何来自www.connectionstrings.com的连接字符串,似乎不需要TNS或DSN,包含EZCONNECT变体,都给我:
[HY000] [unixODBC][Oracle][ODBC][Ora]ORA-12162: TNS:net service name is incorrectly specified
(12162) (SQLDriverConnectW)
Run Code Online (Sandbox Code Playgroud)