我们在从VB.NET 2010应用程序将记录插入iSeries上的文件/表时遇到问题。
在Windows Xp上运行的旧系统没有问题,但我们正在尝试在Windows 7 64位盒子和OS400 V5.4 上运行代码(insode VS 2010)
以下是驱动程序返回的错误消息:
ERROR [42000] [IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0104 - Token 2014 was not valid. Valid tokens: ) ,.
以下是代码的相关部分:
sConStr = "Driver={Client Access ODBC Driver (32-bit)};" & _
"System=" & sAS400Server & ";" & _
"Uid=" & UCase(sAS400UserName) & ";" & _
"Pwd=" & UCase(sAS400UserPwd) & ";" & _
"DBQ=" & UCase$(sAS400Library) & _
IIf(Trim$(sLibraryOther) <> "", "," & sLibraryOther, "") & _
";COMPRESSION=1;ALLOWUNSCHAR=1;TRANSLATE=1;"
conOdbc = New Odbc.OdbcConnection(sConStr)
conOdbc.Open()
我们创建了INSERT语句,它看起来像这样:
"INSERT INTO kerry.YSEPF(YSESID, YSESAN, YSESCC, YSECCY, YSENEGP, YSEAMA, YSESPOD, YSEVFR, YSESNAR, YSELMBY, YSELMPC, YSECRBY, YSECRPC) VALUES (0002109416, 12345678, PS , GBP, C, 000000000006851, 1140918, 1140831, August 2014 Fuel for Co.van , N , 'profile ','DPVO ','profile ','DPVO ')"
然后我们尝试插入如下:
iSubmitItems += 1
Try
iRetVal = cmdOdbc.ExecuteNonQuery()
iSubmitItemsSuccess += 1
Catch ex As Exception
iSubmitItemsFail += 1
每次我们收到错误信息。
我们是否缺少一些东西,比如驱动程序(它是一个32位的驱动程序,但安装在Win64的另一个地方吗?)
编辑我只想提一下,目标文件是打包或压缩的,这就是为什么我们不能以固定长度的文本格式FTP数据,而这正是我们为其他一些数据导入所做的
感谢您的帮助
您的SQL无效:
[..snip...]6851, 1140918, 1140831, August 2014 Fuel for Co.van [...snip...]
^^^^^^^^^^^^^^^^^^^^^^^^^^
字符串必须封装在引号中,例如
[..snip...]6851, 1140918, 1140831, 'August 2014 Fuel for Co.van' [...snip...]
^---------------------------^---
考虑到这个琐碎的/初学者的错误,我要说的是,您也很容易受到SQL注入攻击。
问题出在INSERT语句上。某些值缺少引号。我不确定您列的数据类型,所以我假设它们都是varchar。
此:
"INSERT INTO kerry.YSEPF(YSESID, YSESAN, YSESCC, YSECCY, YSENEGP, YSEAMA, YSESPOD, YSEVFR, YSESNAR, YSELMBY, YSELMPC, YSECRBY, YSECRPC) VALUES (0002109416, 12345678, PS , GBP, C, 000000000006851, 1140918, 1140831, August 2014 Fuel for Co.van , N , 'profile ','DPVO ','profile ','DPVO ')"
应该是这样的:
"INSERT INTO kerry.YSEPF(YSESID, YSESAN, YSESCC, YSECCY, YSENEGP, YSEAMA, YSESPOD, YSEVFR, YSESNAR, YSELMBY, YSELMPC, YSECRBY, YSECRPC) VALUES ('0002109416', '12345678', 'PS' , 'GBP', 'C', '000000000006851', '1140918', '1140831', 'August 2014 Fuel for Co.van', 'N' , 'profile','DPVO','profile','DPVO')"