gpt4 book ai didi

带有 ODBC 的 PostgreSQL : "there is no parameter $1"

转载 作者:行者123 更新时间:2023-11-29 14:01:40 24 4
gpt4 key购买 nike

我有一个插入语句:

    INSERT INTO billData (
tmStart, tsDuration, eCallDir, ...
) VALUES (
$1, -- tmStart
$2, -- tsDuration
$3, -- eCallDir
...
);

我使用SQLPrepare编译,通过SQLBindParameter绑定(bind)参数,通过SQLExecute执行。

完成上述所有步骤后,返回错误代码 42P02(没有参数 $1)。

顺便说一句:我也为 MS SQL Server 和 MySQL 使用了几乎相同的代码,这两个数据库运行良好,所以我相信我的代码是正确的。

PS:PostgreSQL 是v9.1; psqlODBC 是 v9.01.0100-1。

============================================= =============
更新:

并且出现了以下错误:42601(在“,”处或附近出现语法错误)当我使用“?”时作为参数占位符:

    INSERT INTO billData (
tmStart, tsDuration, eCallDir, ...
) VALUES (
<strong>?</strong>, -- tmStart
<strong>?</strong>, -- tsDuration
<strong>?</strong>, -- eCallDir
...
);

============================================= =============
更新:

根据j.w.r的建议,在ODBC连接字符串中添加UseServerSidePrepare=1选项后就可以了。

非常感谢:-)

最佳答案

虽然我确信准备好的语句与 PostgreSQL ODBC 一起工作得很好,但我认为这个语句代码有问题。起初我会删除注释以使这个 INSERT 尽可能简单。我刚刚尝试了带有注释和末尾冒号的多行 INSERT,并且效果很好。我转换了一点我的测试 Python 代码:

import odbc

db = odbc.odbc('odbcalias/user/password')
c = db.cursor()
r = c.execute("""INSERT INTO billData (
tmStart, tsDuration, eCallDir, ...
) VALUES (
?, -- tmStart
?, -- tsDuration
?, -- eCallDir
...
);""", (tmStart, tsDuration, eCallDir, ))
print('records inserted: %s' % (r))

你能用 ActivePython 2.7 试试吗(它已经有 odbc 模块)?

如果它能工作,则启用 ODBC 跟踪并测试该程序。在 odbc sql 跟踪文件中应该是这样的条目:

...
python.exe odbc 924-e8c ENTER SQLExecDirect
HSTMT 00A029A8
UCHAR * 0x00B5A480 [ -3] "INSERT INTO test_table(txt) VALUES (?)\ 0"
SDWORD -3

python.exe odbc 924-e8c EXIT SQLExecDirect with return code 0 (SQL_SUCCESS)
HSTMT 00A029A8
UCHAR * 0x00B5A480 [ -3] "INSERT INTO test_table(txt) VALUES (?)\ 0"
SDWORD -3

python.exe odbc 924-e8c ENTER SQLNumResultCols
HSTMT 00A029A8
SWORD * 0x0021FAA0

python.exe odbc 924-e8c EXIT SQLNumResultCols with return code 0 (SQL_SUCCESS)
HSTMT 00A029A8
SWORD * 0x0021FAA0 (0)

python.exe odbc 924-e8c ENTER SQLRowCount
HSTMT 00A029A8
SQLLEN * 0x0021FBDC

python.exe odbc 924-e8c EXIT SQLRowCount with return code 0 (SQL_SUCCESS)
HSTMT 00A029A8
SQLLEN * 0x0021FBDC (1)

然后对您的应用程序进行类似的跟踪,并尝试找出不同之处。

关于带有 ODBC 的 PostgreSQL : "there is no parameter $1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12310115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com