我真的被一个看似简单的声明所困扰。
我正在处理DBF表。当我在一个名为“DBF Viewer 2000”的程序中打开文件时,它声明该文件是“FoxBase + / dBASE III PLUSE,没有备忘录”。
如果我运行这个VB.NET代码
Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & opt.path & "\" & ";Extended Properties=dBase III;"
Dim oledbAdapterIns As New OleDbDataAdapter()
Dim InsConnection As New OleDbConnection(ConnectionString)
oledbAdapterIns = New OleDbDataAdapter()
InsConnection = New OleDbConnection(ConnectionString)
Try
InsConnection.Open()
Dim s As String
s = "UPDATE LIBRIAZ SET LIBRIAZ.ULTNUM=6 WHERE LIBRIAZ.REGISTRO='CW' AND LIBRIAZ.ANNO='2011' AND LIBRIAZ.CHIAVE='ORD_REG'"
oledbAdapterIns.InsertCommand = New OleDbCommand(s, InsConnection)
Dim rows As Integer = oledbAdapterIns.InsertCommand.ExecuteNonQuery()
Catch ex As Exception
Debug.Writeline(ex.Message)
End Try
oledbAdapterIns.Dispose()
InsConnection.Dispose()
它运行没有错误但是没有更新表。
现在很奇怪:如果我删除三个条件中的一个
LIBRIAZ.REGISTRO='CW' AND LIBRIAZ.ANNO='2011' AND LIBRIAZ.CHIAVE='ORD_REG'
例如
LIBRIAZ.ANNO='2011' AND LIBRIAZ.CHIAVE='ORD_REG'
UPDATE有效,将LIBRIAZ.ULTNUM设置为6
这不是我删除哪个条件的问题,因为它足以删除其中一个以使UPDATE正常工作。
这几天我想弄清楚为什么会这样......现在我非常绝望。
任何人都有线索?
答案 0 :(得分:0)
第一件打击我的是你对“没有备忘录”的第一个评论。当dbf文件具有备注字段时(如其他SQL中的blob,用于存储较大的非标准数据元素,如嵌入图片,Excel文件,XML或其他)。文件“集”将是例如
YourTable.dbf (main table)
YourTable.cdx (index file associated with just this table)
YourTable.fpt (memo file associated with just this table)
主.dbf有一个文件指针系统,它是.FPT文件中的字节偏移量,其中存储了内容(如果适用)。所以,我会先看到发现丢失/损坏的.fpt文件。
接下来,在您的更新语句中,由于您只是进行直接更新而不是基于另一个表的相关更新,因此您不需要ALIAS每个字段...尝试向下删除...
s = "UPDATE LIBRIAZ SET ULTNUM = 6 WHERE REGISTRO='CW' AND ANNO='2011' AND CHIAVE='ORD_REG'"