【问题标题】:"Variable ' ' is not found" when using EXECSCRIPT() command in OLEDB VB.NET在 OLEDB VB.NET 中使用 EXECSCRIPT() 命令时“未找到变量 ''”
【发布时间】:2017-06-10 07:36:08
【问题描述】:

我有一个包含超过 10k 条记录的 DBF 文件,我需要使用 vb.net OleDbCommand 使用 Visual FoxPro 的 SEEK 命令(以加快搜索速度)搜索记录。我尝试使用EXECSCRIPT() 来执行 VFP 命令。这是我的代码:

  Using oleCon As OleDbConnection = New OleDbConnection("C:\Users\maymay\Documents\DBF File")
        Try
            oleCon.Open()
            oleCom.Connection = oleCon
            oleTrans = oleCon.BeginTransaction(IsolationLevel.ReadCommitted)
            oleCom.Transaction = oleTrans

            oleCom.CommandText = "EXECSCRIPT([USE 'C:\Users\maymay\Documents\DBF File\201-file.dbf' ALIAS AA])"
            oleCom.ExecuteNonQuery()

            oleCom.CommandText = "EXECSCRIPT([SELECT AA])"
            oleCom.ExecuteNonQuery()

            oleCom.CommandText = "EXECSCRIPT([SEEK('105345')])"
            oleCom.ExecuteNonQuery()

            oleTrans.Commit()

        Catch ex As Exception
            Try
                oleTrans.Rollback()
                MessageBox.Show("Error occurred. Rollback success")
            Catch rb As Exception
                MessageBox.Show("rollback failed")
            End Try
        End Try
    End Using

但线

 oleCom.CommandText = "EXECSCRIPT([USE 'C:\Users\maymay\Documents\DBF File\201-file.dbf' ALIAS AA])"

返回异常

未找到变量“ ”。

我试图删除[ ],消息变成了

缺少函数名)。

我错过了什么?或者有没有其他更快的方法来使用 vb.net OledbCommand 在 DBF 中查找记录?任何帮助将不胜感激。

【问题讨论】:

    标签: wpf vb.net visual-foxpro oledbcommand


    【解决方案1】:

    该行本身不会返回这样的错误。您可能有一些查找变量的索引或数据库事件。您应该首先尝试在 VFP 中执行该行。

    OTOH 我不建议使用 Execscript()。它的使用有限,在您拥有的代码中,它实际上没有任何用途(如果它成功运行 - 顺便说一句,该代码不能是您的真实代码,它会在您定义连接字符串的第一行失败,您有一个无效的连接字符串)。

    不管怎样,假设你会对该记录做一些事情,你可以这样做:

    Using oleCon As OleDbConnection = New OleDbConnection("Provider=VFPOLEDB;Data Source=C:\Users\maymay\Documents\DBF File")
        Dim cmd As New OleDbCommand("select * from ('201-file') where yourFieldName = '105345'", oleCon)
        oleCon.Open()
        Dim rdr = cmd.ExecuteReader()
        If rdr.Read() Then
        ' do whatever with rdr
        ' ie:       
        'Console.WriteLine(rdr("FieldName"))
        End If 
        oleCon.Close()
    End Using
    

    如果 yourFieldName 有一个索引,它将被使用。顺便说一句,您正在搜索 105345 之类的值,就像它是一个字符串一样。

    【讨论】:

      猜你喜欢
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多