DBF上SQL UPDATE语句的奇怪行为

时间:2011-01-29 16:36:19

标签: .net vb.net oledb dbf

我真的被一个看似简单的声明所困扰。

我正在处理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正常工作。

这几天我想弄清楚为什么会这样......现在我非常绝望。

任何人都有线索?

1 个答案:

答案 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'"