首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB.NET -通过ODBC连接插入/删除

VB.NET -通过ODBC连接插入/删除
EN

Stack Overflow用户
提问于 2015-10-06 16:27:02
回答 1查看 185关注 0票数 1

我正在通过ODBC连接连接到AS/400。当我尝试从文件中插入和删除时,我会遇到奇怪的错误。首先,我找到的构造查询的格式如下:

代码语言:javascript
复制
"DELETE FROM <library>.<filename> WHERE <field> = <value>"

因此,基于此,我写了这个:

代码语言:javascript
复制
"DELETE FROM RM#AVLIB.AV90909JWB WHERE MBR_NUM = " & mbr_num

奇怪的是,它抛出了一个关于不喜欢删除的错误,但是如果我完全删除了这个库,它就会消失:

代码语言:javascript
复制
"DELETE FROM AV90909JWB WHERE MBR_NUM = " & mbr_num

我猜它只是不喜欢#符号,没有库就工作了,因为我的默认库是我在这里使用的库。但现在我的INSERT中出现了一个错误,它说:

错误22003RUMBA数据AccessNumeric值超出范围。SQLCODE = -420

在运行了我传递的所有值之后,我没有看到任何比字段长度更长的值,所以我不知道这是从哪里来的。

下面是我现在的代码:

代码语言:javascript
复制
delQry = "DELETE FROM AV90301JWB WHERE MBR_CD = '" & MBR_CD & "' AND LOC_CD = '" & LOC_CD & "' AND PRP_ITM = '" & PRP_ITM & "'"
pushQry = "INSERT INTO AV90301JWB ( " & _
    "MBR_NUM, " & _
    "LOC_CD, " & _
    "AVBLD_CLMT, " & _
    "ADDRESS1, " & _
    "ADDRESS2, " & _
    "CITY, " & _
    "STATE, " & _
    "ZIPCODE, " & _
    "AVBLD_DOS, " & _
    "CNST_QLTY, " & _
    "SEISMIC, " & _
    "WIND, " & _
    "AVBLD_DSC, " & _
    "AVBLD_DSC1, " & _
    "AVBLD_DSC2, " & _
    "AVBLD_DSC3, " & _
    "MISC_ADJ, " & _
    "SEC_ID, " & _
    "AVCOS_RC, " & _
    "YR_BUILT, " & _
    "NBR_STORY, " & _
    "SQR_FT, " & _
    "SUBCLASS, " & _
    "OCC_CD1, " & _
    "OCC_DSC1, " & _
    "OCC_PCT1, " & _
    "STORY_HT1, " & _
    "OCC_CD2, " & _
    "OCC_DSC2, " & _
    "OCC_PCT2, " & _
    "STORY_HT2, " & _
    "OCC_CD3, " & _
    "OCC_DSC3, " & _
    "OCC_PCT3, " & _
    "STORY_HT3, " & _
    "OCC_CD4, " & _
    "OCC_DSC4, " & _
    "OCC_PCT4, " & _
    "STORY_HT4, " & _
    "OCC_CD5, " & _
    "OCC_DSC5, " & _
    "OCC_PCT5, " & _
    "STORY_HT5, " & _
    "HEAT_SYS, " & _
    "COOL_SYS, " & _
    "PWALL_EXT, " & _
    "ROOF_MAT, " & _
    "SPRINKLER, " & _
    "MANL_FIRE, " & _
    "AUTO_FIRE, " & _
    "CNST_PCT1, " & _
    "CNST_PCT2, " & _
    "CNST_PCT3, " & _
    "CNST_PCT4, " & _
    "CNST_PCT5) " & _
  "VALUES (" & _
    "'" & MBR_NUM & "', " & _
    "'" & LOC_CD & "', " & _
    "'" & AVBLD_CLMT & "', " & _
    "'" & ADDRESS1 & "', " & _
    "'" & ADDRESS2 & "', " & _
    "'" & CITY & "', " & _
    "'" & STATE & "', " & _
    "'" & ZIPCODE & "', " & _
    "'" & AVBLD_DOS.ToShortDateString() & "', " & _
    "'" & CNST_QLTY & "', " & _
    "'" & SEISMIC & "', " & _
    "'" & WIND & "', " & _
    "'" & AVBLD_DSC & "', " & _
    "'" & AVBLD_DSC1 & "', " & _
    "'" & AVBLD_DSC2 & "', " & _
    "'" & AVBLD_DSC3 & "', " & _
    "'" & MISC_ADJ & "', " & _
    "'" & SEC_ID & "', " & _
    "" & Math.Round(AVCOS_RC, 2, MidpointRounding.AwayFromZero) & ", " & _
    "'" & YR_BUILT & "', " & _
    "'" & NBR_STORY & "', " & _
    "'" & SQR_FT & "', " & _
    "'" & SUBCLASS & "', " & _
    "'" & OCC_CD1 & "', " & _
    "'" & OCC_DSC1 & "', " & _
    "'" & OCC_PCT1 & "', " & _
    "'" & STORY_HT1 & "', " & _
    "'" & OCC_CD2 & "', " & _
    "'" & OCC_DSC2 & "', " & _
    "'" & OCC_PCT2 & "', " & _
    "'" & STORY_HT2 & "', " & _
    "'" & OCC_CD3 & "', " & _
    "'" & OCC_DSC3 & "', " & _
    "'" & OCC_PCT3 & "', " & _
    "'" & STORY_HT3 & "', " & _
    "'" & OCC_CD4 & "', " & _
    "'" & OCC_DSC4 & "', " & _
    "'" & OCC_PCT4 & "', " & _
    "'" & STORY_HT4 & "', " & _
    "'" & OCC_CD5 & "', " & _
    "'" & OCC_DSC5 & "', " & _
    "'" & OCC_PCT5 & "', " & _
    "'" & STORY_HT5 & "', " & _
    "'" & HEAT_SYS & "', " & _
    "'" & COOL_SYS & "', " & _
    "'" & PWALL_EXT & "', " & _
    "'" & ROOF_MAT & "', " & _
    "'" & SPRINKLER & "', " & _
    "'" & MANL_FIRE & "', " & _
    "'" & AUTO_FIRE & "', " & _
    "'" & CNST_PCT1 & "', " & _
    "'" & CNST_PCT2 & "', " & _
    "'" & CNST_PCT3 & "', " & _
    "'" & CNST_PCT4 & "', " & _
    "'" & CNST_PCT5 & "')"

Dim connectionString As String = ConfigurationManager.AppSettings("iSeriesConnString")
Dim insCommand As New OdbcCommand(pushQry)
Dim delCommand As New OdbcCommand(delQry)
Dim da As New OdbcDataAdapter

Using myConn As New OdbcConnection(connectionString)
    insCommand.Connection = myConn
    delCommand.Connection = myConn
    myConn.Open()
    da.InsertCommand = insCommand
    da.DeleteCommand = delCommand
    da.DeleteCommand.ExecuteNonQuery()
    da.InsertCommand.ExecuteNonQuery() 
End Using

有没有人看到我缺少的东西,或者对如何找到我的问题有任何想法?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-06 16:36:41

在标识符中转义无效字符或转义与保留关键字冲突的标识符的标准ANSI SQL方法是将其放在双引号中:

代码语言:javascript
复制
DELETE FROM "RM#AVLIB".AV90909JWB WHERE ...

显然,在where子句中插入或使用的值之一超出了为该列定义的范围。例如,如果列被定义为NUMERIC(2),则不能插入100

此外,我强烈建议您使用命令参数而不是字符串连接:请参阅https://stackoverflow.com/a/2092851/880990

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32974996

复制
相关文章

相似问题

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