在Win x64上使用Tcl和tdbc而不是MS SQL
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Win x64上使用Tcl和tdbc而不是MS SQL相关的知识,希望对你有一定的参考价值。
几年来,我们一直在使用tclodbc软件包来运行针对MS SQL Server的查询。现在我们必须切换到x64进程并且tclodbc没有加载,因为没有x64版本。
我们开始研究替代方案并尝试了tdbc,但是我们遇到了作为参数传递的字符字段的问题。我创建了一个包含2个整数列和2个varchar列(50和100长)的测试表。
我试图插入记录,并发生以下情况:1。如果我插入只提供2个整数参数的记录一切正常 - 插入5条记录(见下面的代码)。 2.如果我插入只提供1个字符参数的记录1插入记录,然后脚本失败并出现以下错误:“[Microsoft] [SQL Server的ODBC驱动程序11]字符串数据,右截断”3.如果我传递两个字符参数或整数参数和字符参数然后没有插入 - 我得到与上面相同的错误。
我没有测试任何其他数据类型,但看起来字符参数有问题(我也试过nvarchar和char类型列)。
这是我的代码:
package require tdbc::odbc
set con "Driver={ODBC Driver 11 for SQL Server};server=server;database=database;Intergrated Security=True;Trusted_Connection=Yes"
tdbc::odbc::connection create db $con
set insert_cmd [db prepare {INSERT INTO dbo.testing_tdbc (f50,f100) VALUES(:f50,:f100) } ]
$insert_cmd paramtype f50 char 50
$insert_cmd paramtype f100 char 100
foreach fint [list 1 2 3 4 5] {
set fi1 $fint
set fi2 [expr {$fi1*2}]
set f50 "${fi2}_${fi1}"
set f100 $f50
$insert_cmd execute
}
$insert_cmd close
db close
我尝试使用ODBC驱动程序13 for SQL Server - 所有结果都相同。
[Microsoft] [SQL Server的ODBC驱动程序11]字符串数据,右截断
您可能知道,此错误是由插入的字符串长于声明的列精度引起的。
根据tdbc :: statement手册,$stmt paramtype
的语法是:
$stmt paramtype ?direction? type ?precision? ?scale?
所以我不确定你的意思是将f50
作为direction
传递给它(这应该是:in, inout, out
之一。我想你可以省略$stmt paramtype
调用并直接使用例如$insert_cmd
执行$stmt execute ?dict?
:
set insert_cmd [db prepare {INSERT INTO dbo.testing_tdbc (f50,f100) VALUES(:f50,:f100) } ]
foreach fint {1 2 3 4 5} {
set value [expr {$fint*2}]_$fint
set bindings [dict create f50 $value f100 $value]
$insert_cmd execute $bindings
}
$insert_cmd close
db close
以上是关于在Win x64上使用Tcl和tdbc而不是MS SQL的主要内容,如果未能解决你的问题,请参考以下文章
visual studio 2008有64位的吗?我win 7 x64系统,怎么装 vs2008
QT 5.6.1 应用程序在退出插槽后仅在 x86 架构而不是 x64 上崩溃
在 32 位 win7 上部署 Qt 应用程序 - 在 Win7 x64 上工作(和编译)