问题标签 [unixodbc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 通过 ODBC 执行存储过程
我有一个应用程序,它允许用户为我的应用程序生成的某些值输入带有占位符的 SQL 字符串。应用程序将用值替换占位符并通过各种数据库后端执行 SQL 字符串。
对于 ODBC 后端,我在 SQL 字符串上调用 SQLExecDirect(),它在常规查询上运行良好,但对于带参数的存储过程失败。
有没有一种简单的方法来扩展这种机制以支持存储过程?某种方式的SQL必须怎么写?
我现在唯一能想到的就是开始解析 SQL 字符串并调用 SQLBindParameter() n 次,如果它包含一个“调用”。但是解析 SQL 很棘手。
有任何想法吗 ?
工作 SQL 示例:SELECT columnA from foo where columnB = '%placeholder'
非工作 SQL: CALL StoredFoo('%placeholder')
php - 在 PHP PDO-ODBC、unixODBC 和 FreeTDS 中使用类型化绑定参数
我正在使用以下设置从 PHP 应用程序访问 MS-SQL 数据库
- 红帽企业 Linux 5
- 带有 PDO 和 PDO_ODBC 的 PHP 5.2.14
- unixODBC 2.2.11
- FreeTDS 0.82.1.dev.20100810
未参数化的查询工作正常。唯一的问题是被迫关闭单个结果语句上的游标(使用 PDOStatment::closeCursor)以避免“0 [FreeTDS][SQL Server] Invalid cursor state (SQLSTATE=24000)”错误。
但是我遇到了类型绑定参数的主要问题。使用这样的代码时:
其中两列都是 INT。我收到“206 [FreeTDS][SQL Server]操作数类型冲突:文本与 int [SQLSTATE=22018] 不兼容”错误。
在 unixODBC 日志中,我得到类似
我对日志的理解是 unixODBC 正在尝试使用正确的类型绑定参数。但是 FreeTDS 不支持该功能(IM001 是'驱动程序不支持此功能')。所以 unixODBC 在没有正确输入的情况下继续。
有人可以确认此诊断,或者更好的是 FreeTDS 中类型绑定参数的已知问题吗?如果是,它们是否使用 PHP PDO 工作,我可以配置它吗?
django - Linux 上的 Django 站点上的 unixODBC 问题在刷新时消失
我有一个关于 Django、unixODBC、FreeTDS、Apache2、mod_wsgi 的问题,这有点类似于之前在 SO 上提出的这个问题。
我有一个 Django 网站,可以在最新的 Django 上运行,即 1.2.3。它在大多数情况下使用托管模型,因为除了会话信息之外,Django 不会将任何内容写入数据库,而只会从中读取。
有问题的数据库托管在 MSSQL 2005 上的 Windows 机器上。
Django 项目托管在 Linux 机器上。它通过 Apache2 上的 mod_wsgi 提供服务。数据库连接是通过臭名昭著的 FreeTDS 和 unixODBC duo。FreeTDS 和 unixODBC 的最新版本正在运行。在 Python 端,pyodbc 和 django-pyodbc 用于 DB 的东西。
该项目部署在两个 Linux 实时服务器上,具有相同的设置,位于负载均衡器后面。有一个数据库服务器都连接到。
在实时生产服务器上,存在一些间歇性问题。在查询数据库以获取要显示的记录的页面上,有时,我的意思是有时,会引发异常,并出现错误:
这个难题的一个奇怪之处在于,每当您收到此错误时,只需在 Web 浏览器上点击刷新即可将其清除,并使用从数据库中获取的记录来呈现页面。
错误发生时从调试输出生成的 SQL 非常简单:
当然,在 Django 开发服务器上,这不会出现。在开发机器上,mod_wsgi 以守护程序模式运行,我多次遇到此错误。我通过部署在 mod_python 上进行了测试,我没有看到任何错误。然后我在嵌入式模式下使用 mod_wsgi 进行了测试,同样,我没有看到任何错误。我认为将实时服务器上的设置更改为在嵌入式模式下使用 mod_wsgi,但有时仍然会出现错误。
我真的坚持这一点。我不确定要尝试什么才能更接近找出真正导致问题的原因。我不确定我是否提供了所有有用的信息。如果我没有,请指出,我会更新问题。
我不相信代码中有任何错误并导致此问题。如果是这种情况,它不会在大部分时间或所有时间都有效。我尝试在实时服务器上清除 .pyc 文件、重新启动 Apache 等,但无济于事。
任何,任何帮助将不胜感激。
谢谢。
更新:我将“never_cache”装饰器添加到大多数视图函数中,希望也许可以关闭 Django 所做的任何小的模型级缓存。但这在实时服务器上并没有真正做任何事情。我现在真的没有主意了。
更新#2:我在sql_sever/pyodbc/base.py
生成异常的代码周围添加了一些日志记录(django-pyodbc)。而且我有更多的 SQL 查询,显然,产生了难以捉摸的错误:
c++ - 我的 C++ 应用程序无法连接到 Informix DB 服务器
我有一个应用程序(无法提供代码,因为它很长),它使用unixODBC
. 另外,我已经安装了isql
. 一切似乎都配置正确 - 驱动程序、服务器等,因为使用isql
,我连接到 Informix DB 没有问题。但即使我使用相同的设置,我的应用程序也无法连接。返回的错误是:
所以,这是“有趣”的部分 - 我将odbc.ini
文件复制到~/.odbc.ini
其中/etc/odbc.ini
,然后一切都开始工作几乎正常(“几乎”,因为应用程序可以连接到一个 DSN,但不能连接到另一个,但它仍然是一些东西)。
还 :
INFORMIXDIR 也正确设置。什么~/.odbc.ini
都没有/etc/odbc.ini
(实际上,第二个有帮助,与 无关~/.odbc.ini
,只是尝试过(:)
odbc.ini
配置正确,isql
工作正常。
如果您需要更多信息,请告诉我。谢谢 (:
php - unixODBC 错误“/usr/lib/libtdsodbc.so.0:错误的 ELF 类:ELFCLASS32”
我正在一个网站上工作,我需要通过 PHP 将远程 MS SQL Server 数据库中的数据导入 Unix 服务器上的 MySQL 数据库。感谢对这篇文章的回答,我能够在我的开发环境(Mac OS X 10.6)上启动并运行所有内容。然而,现在我正在尝试设置我的服务器环境,即 CentOS 5.4。我安装并配置了 unixODBC 和 FreeTDS,但是当我尝试连接时,我收到以下错误:
Connection Failed:[unixODBC][Driver Manager]Can't open lib '/usr/lib/libtdsodbc.so.0' : /usr/lib/libtdsodbc.so.0: wrong ELF class: ELFCLASS32
从我在互联网上找到的信息来看,我似乎安装了 32 位 unixODBC(或 FreeTDS,我不确定)(libtdsodbc.so.0 符号链接到 libtdsodbc.so.0.0.0)和它需要是 64 位的。那是对的吗?如果是这样,我如何升级到 64 位版本?我是开发人员,而不是服务器专家,所以这有点超出我的服务器知识。
谢谢。
unixodbc - 在多线程并发设置中使用 unixODBC
我要问并回答这个问题,因为我花了很长时间才弄清楚,我希望答案一开始就在这里。
问题:一个长时间运行的 unixODBC 查询会阻止来自同一应用程序的所有其他查询。
问题是:如何阻止这种情况发生。
php - unixODBC + PHP,无效的字符串或缓冲区长度错误消息
我通过 unixODBC 使用 PHP 访问 AS400/DB2
但是我的 AS400 的某些字段名称以“££..”命名(无法更改)
当我尝试从我的 PHP 页面启动 sql 查询时
我总是收到相同的错误信息
SQL 错误:[unixODBC][IBM][System i Access ODBC Driver]Invalid string or buffer length., SQL 状态 S1090 in SQLExecDirect
如果有人有线索。
python - 如何通过 odbc 使用 python 连接到 mysql
我正在运行在 Fedora 14 x64 上加载的 mysql、pyodbc、python 2.7。
Odbcinst.ini 是:
odbc.ini 是:
mysql.sock 是空的?/var/lib/mysql/mysql.sock 有 0.B
python脚本是:
我似乎无法连接上面的脚本,使用 isql 我得到连接!
我的错误消息:
在 Win XPx64 上,
错误消息:
sql-server - Ruby 连接到 SQL Server
我在将 Ruby 连接到 Microsoft SQL Server 时遇到问题。我正在运行 Mac OS X,但目标环境是 Ubuntu Linux。
这是我尝试过的:
然后我有这些文件/usr/local/etc
:
odbc.ini
odbcinst.ini
freetds.conf
odbcinst.ini
我在我的 ODBC 驱动程序文件中添加了对文件中 FreeTDS 驱动程序的引用,如下所示:
然后我freetds.conf
像这样在文件中配置服务器:
最后我在odbc.ini
文件中添加了 ODBC DSN,如下所示:
我可以验证我的服务器是否在线并且端口是否打开(通过 telnet 和 yougetsignal.com 端口检查)。
作为测试,我这样做了:
它似乎连接得很好。传入无效值会导致预期错误。
所以最后我的问题:
如何将其扩展到 Ruby?到目前为止,我尝试过的任何方法都没有奏效。我试过这样的续集:
我收到这样的错误:
这告诉我它正在正确找到我的驱动程序配置,但由于某种原因无法连接。
我也尝试过这样的 DBI:
我得到一个类似的错误。
有什么建议么?我觉得我已经很接近了,但不确定接下来要尝试什么来解决这个问题。
c++ - 可以将超过 255 个字节的字符串用作 ODBC 准备语句参数值吗?
我正在使用libodbc++
C++ 的 ODBC 包装器,其设计类似于 JDBC。我有一个准备好的声明"INSERT INTO t1 (col1) VALUES (?)"
,其中t1.col1
定义为VARCHAR(500)
.
当我调用时statement->setString(1, s)
, 的值s
被截断为255
。我怀疑 libodbc++ 库,但由于我对 ODBC 不是很熟悉,我想确保包装器不只是暴露底层 ODBC 的限制。ODBC API 参考太复杂了,无法快速浏览,坦率地说我真的不想这样做,所以请原谅我问了一个基本问题。
注意:通过同一个库的未准备和未参数化的insert
语句会插入一个 long 值 ok,因此这不是 MySql DB 的问题。