问题标签 [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.

0 投票
1 回答
9183 浏览

sql - 通过 ODBC 执行存储过程

我有一个应用程序,它允许用户为我的应用程序生成的某些值输入带有占位符的 SQL 字符串。应用程序将用值替换占位符并通过各种数据库后端执行 SQL 字符串。

对于 ODBC 后端,我在 SQL 字符串上调用 SQLExecDirect(),它在常规查询上运行良好,但对于带参数的存储过程失败。

有没有一种简单的方法来扩展这种机制以支持存储过程?某种方式的SQL必须怎么写?

我现在唯一能想到的就是开始解析 SQL 字符串并调用 SQLBindParameter() n 次,如果它包含一个“调用”。但是解析 SQL 很棘手。

有任何想法吗 ?

工作 SQL 示例:SELECT columnA from foo where columnB = '%placeholder'

非工作 SQL: CALL StoredFoo('%placeholder')

0 投票
3 回答
5369 浏览

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 工作,我可以配置它吗?

0 投票
1 回答
737 浏览

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 查询,显然,产生了难以捉摸的错误:

0 投票
2 回答
706 浏览

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工作正常。

如果您需要更多信息,请告诉我。谢谢 (:

0 投票
3 回答
8046 浏览

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 位版本?我是开发人员,而不是服务器专家,所以这有点超出我的服务器知识。

谢谢。

0 投票
3 回答
6659 浏览

unixodbc - 在多线程并发设置中使用 unixODBC

我要问并回答这个问题,因为我花了很长时间才弄清楚,我希望答案一开始就在这里。

问题:一个长时间运行的 unixODBC 查询会阻止来自同一应用程序的所有其他查询。

问题是:如何阻止这种情况发生。

0 投票
2 回答
2155 浏览

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

如果有人有线索。

0 投票
3 回答
12520 浏览

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 上,

错误消息:

0 投票
1 回答
20218 浏览

sql-server - Ruby 连接到 SQL Server

我在将 Ruby 连接到 Microsoft SQL Server 时遇到问题。我正在运行 Mac OS X,但目标环境是 Ubuntu Linux。

这是我尝试过的:

  • 安装unixODBC
  • 安装FreeTDS
    • 使用了选项--with-unixodbc=/usr/local/etc --with-tdsver=8.0

然后我有这些文件/usr/local/etc

  • odbc.ini
  • odbcinst.ini
  • freetds.conf

odbcinst.ini我在我的 ODBC 驱动程序文件中添加了对文件中 FreeTDS 驱动程序的引用,如下所示:

然后我freetds.conf像这样在文件中配置服务器:

最后我在odbc.ini文件中添加了 ODBC DSN,如下所示:

我可以验证我的服务器是否在线并且端口是否打开(通过 telnet 和 yougetsignal.com 端口检查)。

作为测试,我这样做了:

它似乎连接得很好。传入无效值会导致预期错误。

所以最后我的问题:

如何将其扩展到 Ruby?到目前为止,我尝试过的任何方法都没有奏效。我试过这样的续集:

我收到这样的错误:

这告诉我它正在正确找到我的驱动程序配置,但由于某种原因无法连接。

我也尝试过这样的 DBI:

我得到一个类似的错误。

有什么建议么?我觉得我已经很接近了,但不确定接下来要尝试什么来解决这个问题。

0 投票
2 回答
544 浏览

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 的问题。