C# OleDb异常:命令包含无法识别的短语/关键字

C# OleDb异常:命令包含无法识别的短语/关键字,c#,sql,oledb,dbf,visual-foxpro,C#,Sql,Oledb,Dbf,Visual Foxpro,当使用VisualFoxPro 9.0驱动程序从DBF文件填充数据集时,应用程序的某些用户会收到异常。我似乎不知道发生了什么,因为错误总是发生在某些用户身上,而不会发生在其他用户身上,有时(根据.DBF文件的位置)会发生在其他用户身上。我已经确保所有用户都安装了visual fox pro 9.0驱动程序。下面是导致问题的代码位(leieLoc是DBF文件的位置): 我真的希望我能够改变数据库的格式,但是我不能,因为它是由第三方发布的 错误堆栈跟踪如下所示: System.Data.OleDb.

当使用VisualFoxPro 9.0驱动程序从DBF文件填充数据集时,应用程序的某些用户会收到异常。我似乎不知道发生了什么,因为错误总是发生在某些用户身上,而不会发生在其他用户身上,有时(根据.DBF文件的位置)会发生在其他用户身上。我已经确保所有用户都安装了visual fox pro 9.0驱动程序。下面是导致问题的代码位(leieLoc是DBF文件的位置):

我真的希望我能够改变数据库的格式,但是我不能,因为它是由第三方发布的

错误堆栈跟踪如下所示:

System.Data.OleDb.OleDbException (0x80040E14): Command contains unrecognized phrase/keyword.
    at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
    at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
    at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
    at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
    at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
    at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
    at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
    at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
    at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
    at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
    at ExclusionSearcher.Searching.ThreadProcesser.searchLeie(List`1 names)
任何帮助都将不胜感激;我不知道是什么原因导致了这里的问题。

您对

string sql = "select * from " + this.leieLoc + ";";
string constr = "Provider=VFPOLEDB.1;Data Source=" + this.leieLoc + ";";
首先,您的表和数据源不能相同。如果错误是
命令包含无法识别的短语/关键字
,我将假定连接字符串是正确的。这意味着您应该修复sql字符串中的
tableName

此外,无需在连接上调用
Close
Dispose
。只有接近就够了!无需
处理
数据集。您还可以使用using代替Dispose,因为在代码中,如果发生异常,资源将不会被处置。如果要直接使用Dispose,需要这样编写:

try
{
    conn.Open()
}
catch(Exception)
{
    throw;
}
finnaly
{
    conn.Close();
}
在这种情况下,您可以保证连接将被关闭。适配器也应该这样做。

您的问题在于

string sql = "select * from " + this.leieLoc + ";";
string constr = "Provider=VFPOLEDB.1;Data Source=" + this.leieLoc + ";";
首先,您的表和数据源不能相同。如果错误是
命令包含无法识别的短语/关键字
,我将假定连接字符串是正确的。这意味着您应该修复sql字符串中的
tableName

此外,无需在连接上调用
Close
Dispose
。只有接近就够了!无需
处理
数据集。您还可以使用using代替Dispose,因为在代码中,如果发生异常,资源将不会被处置。如果要直接使用Dispose,需要这样编写:

try
{
    conn.Open()
}
catch(Exception)
{
    throw;
}
finnaly
{
    conn.Close();
}

在这种情况下,您可以保证连接将被关闭。适配器也应该这样做。

尝试将
这个.leieLoc
变量用双引号括在
SELECT
语句中。

尝试将
这个.leieLoc
变量用双引号括在
SELECT
语句中。

数据源和表名不能相同。请检查我的答案,如果有帮助,请告诉我你数据源和表名不能相同。请检查我的答案并告诉我是否有帮助!在适当的情况下使用“Using”关键字。在适当的情况下使用“Using”关键字。