在db2数据库上插入失败(在iSeries上)

时间:2014-09-24 14:21:50

标签: sql db2 odbc ibm-midrange

我们无法从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数据,这是我们为其他一些数据导入所做的事情

感谢您的帮助

2 个答案:

答案 0 :(得分:6)

您的SQL无效:

[..snip...]6851, 1140918, 1140831, August 2014 Fuel for Co.van   [...snip...]
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^

字符串必须用引号括起来,例如

[..snip...]6851, 1140918, 1140831, 'August 2014 Fuel for Co.van'   [...snip...]
                                   ^---------------------------^---

鉴于这个琐碎/初学者的错误,我会说你也容易受到SQL injection attacks的攻击。<​​/ p>

答案 1 :(得分:3)

问题在于您的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')"