首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tcl tdbc::odbc包并将参数传递给查询

tcl tdbc::odbc包并将参数传递给查询
EN

Stack Overflow用户
提问于 2017-03-06 06:40:34
回答 1查看 399关注 0票数 2

这是我第一次尝试使用tdbc包(ODBC连接),我不知道如何将参数传递到查询中。代码如下:

代码语言:javascript
复制
set dsnName dsn1
set username user1
set password xxxxx
set connStr "DSN=$dsnName; UID=$username; PWD=$password;"
tdbc::odbc::connection create db $connStr

set rows [db allrows {SELECT DISTINCT [Address] FROM [Customers] WHERE [Apt Number]='3-b'}]

这是有效的。但是,我想将'3-b‘传递给查询。所以我试着:

代码语言:javascript
复制
set queryValues [dict create apt 3-b]
set rows [db allrows {SELECT DISTINCT [Address] FROM [Customers] WHERE [Apt Number]=':apt'} $queryValues]

但这给了我一个错误(MicrosoftString数据,右截断)或类似的东西。我尝试了不同的格式,但都不起作用。我做错了什么?

(根据Glenn的回答,我也尝试过:

代码语言:javascript
复制
set stmt [db prepare {SELECT DISTINCT [Address] FROM [Customers] WHERE [Apt Number]=:apt}]
set params [dict create apt "3-b"]
set rows [$stmt allrows $params]

相同的错误( 1ODBC SQL Server DriverString数据,右截断)

但这是可行的。

代码语言:javascript
复制
 set stmt [db prepare {SELECT DISTINCT [Address] FROM [Customers] WHERE [Apt Number]='3-b'}]
set rows [$stmt allrows]

我还必须补充说,tclodbc包在这里工作得很好。请参阅下面的代码

代码语言:javascript
复制
package require tclodbc
#<connect to database>
#query
set aptNo "3-b"
set query "SELECT DISTINCT \[Address\] FROM \[Customers\] WHERE \[Apt Number\]=?"
set dbResult [$dbConn $query [list $aptNo]]

在tclodbc包中工作正常,但类似的代码在tdbc包中失败。

--Suresh

EN

回答 1

Stack Overflow用户

发布于 2017-03-06 07:02:14

您需要使用prepared statement

代码语言:javascript
复制
# note, no quotes around the placeholder param name.
set stmt [db prepare {SELECT DISTINCT [Address] FROM [Customers] WHERE [Apt Number]=:apt}]
set params [dict create apt "3-b"]
set rows [$stmt allrows $params]

或者你可以创建一个"apt“局部变量:

代码语言:javascript
复制
set apt "3-b"
set rows [$stmt allrows]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42614938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档