OleDb 异常:命令包含无法识别的 phrase/keyword
OleDb Exception: Command contains unrecognized phrase/keyword
应用程序的某些用户在使用 VisualFoxPro 9.0 驱动程序从 DBF 文件填充数据集时收到异常。我似乎无法弄清楚发生了什么,因为错误总是发生在某些用户身上,从未发生在其他用户身上,有时(根据 .DBF 文件的位置)发生在其他用户身上。我确保所有用户都安装了 visual fox pro 9.0 驱动程序。这是导致问题的代码(leieLoc 是 DBF 文件的位置):
string constr = "Provider=VFPOLEDB.1;Data Source=" + this.leieLoc + ";";
OleDbConnection con = new OleDbConnection(constr);
string sql = "select * from " + this.leieLoc + ";";
OleDbCommand cmd = new OleDbCommand(sql, con);
con.Open();
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
da.Fill(ds);
da.Dispose();
ds.Dispose();
cmd.Dispose();
con.Dispose();
con.Close();
我真希望我能够更改数据库的格式,但是我不能,因为它是由第三方发布的。
错误堆栈跟踪如下:
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 + ";";
首先你的 table 和 DataSource 不能是 same.If 错误是 Command contains unrecognized phrase/keyword
我假设连接字符串是正确的。这意味着您应该在 sql 字符串中修复 tableName
。
也不需要在连接上调用 Close
和 Dispose
。只有关闭就够了!不需要 Dispose
数据集。您也可以使用 using 而不是 Dispose,因为在您的代码中,如果发生异常,资源将不会被 Dispose。如果想直接使用Dispose,需要这样写:
try
{
conn.Open()
}
catch(Exception)
{
throw;
}
finnaly
{
conn.Close();
}
在这种情况下,您保证连接将被关闭。适配器也应该这样做。
尝试在 SELECT
语句中用双引号将 this.leieLoc
变量括起来。
应用程序的某些用户在使用 VisualFoxPro 9.0 驱动程序从 DBF 文件填充数据集时收到异常。我似乎无法弄清楚发生了什么,因为错误总是发生在某些用户身上,从未发生在其他用户身上,有时(根据 .DBF 文件的位置)发生在其他用户身上。我确保所有用户都安装了 visual fox pro 9.0 驱动程序。这是导致问题的代码(leieLoc 是 DBF 文件的位置):
string constr = "Provider=VFPOLEDB.1;Data Source=" + this.leieLoc + ";";
OleDbConnection con = new OleDbConnection(constr);
string sql = "select * from " + this.leieLoc + ";";
OleDbCommand cmd = new OleDbCommand(sql, con);
con.Open();
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
da.Fill(ds);
da.Dispose();
ds.Dispose();
cmd.Dispose();
con.Dispose();
con.Close();
我真希望我能够更改数据库的格式,但是我不能,因为它是由第三方发布的。
错误堆栈跟踪如下:
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 + ";";
首先你的 table 和 DataSource 不能是 same.If 错误是 Command contains unrecognized phrase/keyword
我假设连接字符串是正确的。这意味着您应该在 sql 字符串中修复 tableName
。
也不需要在连接上调用 Close
和 Dispose
。只有关闭就够了!不需要 Dispose
数据集。您也可以使用 using 而不是 Dispose,因为在您的代码中,如果发生异常,资源将不会被 Dispose。如果想直接使用Dispose,需要这样写:
try
{
conn.Open()
}
catch(Exception)
{
throw;
}
finnaly
{
conn.Close();
}
在这种情况下,您保证连接将被关闭。适配器也应该这样做。
尝试在 SELECT
语句中用双引号将 this.leieLoc
变量括起来。