.net - 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:'行/列不存在数据。' 如果我在不过滤的情况下查询文件,它就可以正常工作......任何想法。
请不要推荐任何其他驱动程序..由于希腊编码,它们在我的情况下不起作用..只有这个驱动程序和编码转换后提供数据而不是乱码:-λ╕λ?╕▀ ?-▀ⁿ▀
解决方案
如果“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:\ 路径引用。