首页 > 解决方案 > Microsoft Visual FoxPro 驱动程序不适合

问题描述

你好我有一个奇怪的问题。
我正在尝试过滤 .dbf 文件,但似乎我不能。
每当我尝试应用某种标准时,它都会爆炸。
例如:

oCmd.CommandText = "select VAL([CD]),* from Y:\MYFILE.dat WHERE VAL([CD])>800;"
Dim reader = oCmd.ExecuteReader()
reader.Read()
reader.GetString(15)

我得到一个很好的:System.InvalidOperationException:'行/列不存在数据。' 如果我在不过滤的情况下查询文件,它就可以正常工作......任何想法。
请不要推荐任何其他驱动程序..由于希腊编码,它们在我的情况下不起作用..只有这个驱动程序和编码转换后提供数据而不是乱码:-λ╕λ?╕▀ ?-▀ⁿ▀

标签: .netfoxprodbase

解决方案


如果“CD”列是数字,则不需要 VAL() 函数, -- 除非它是代表所有数字的字符串。如果真的是一个数字字段,你应该能够做到 [CD] > 800。

此外,为了帮助防止命令与列名(CD 更改目录)与列名 CD 的歧义。您可能希望为您的表使用别名并更新您的查询,例如

oCmd.CommandText = 
@"select 
         VAL(mf.CD),
         mf.* 
      from 
         MYFILE.dat mf
      WHERE 
         VAL(mf.CD) > 800";

如果“CD”列确实是数字,则不需要 VAL() 函数调用

oCmd.CommandText = 
@"select 
         mf.* 
      from 
         MYFILE.dat mf
      WHERE 
         mf.CD > 800";

最后一点。您的 OleDb 连接字符串指向文件所在的路径(或数据库),因此您不需要对文件名的显式完整 Y:\ 路径引用。


推荐阅读