这是我第一次尝试使用 tdbc 包(ODBC 连接),但我不知道如何将参数传递到查询中。这是代码:
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”传递给查询。所以我尝试了:
set queryValues [dict create apt 3-b]
set rows [db allrows {SELECT DISTINCT [Address] FROM [Customers] WHERE [Apt Number]=':apt'} $queryValues]
但这给了我一个错误([Microsoft][ODBC SQL Server Driver]String data, right truncation)或类似的东西。我尝试了不同的格式,但没有任何效果。我究竟做错了什么?
(根据格伦的回答,我也试过:
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]
同样的错误([1][Microsoft][ODBC SQL Server Driver]字符串数据,右截断)
但这是有效的。
set stmt [db prepare {SELECT DISTINCT [Address] FROM [Customers] WHERE [Apt Number]='3-b'}]
set rows [$stmt allrows]
我还必须补充一点,tclodbc 包在这里工作得很好。请参阅下面的代码
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 包中失败。
——苏雷什