4

我正在尝试将此查询应用于 Access 数据库:

OleDbConnection acessConn = database.con_accessa_m(acessdbs[i]);

string acessquery = "SELECT LTRIM(MID([Owner], 1, INSTR( [Owner],'/')-1)) AS 'lastname',IIf( INSTR( LTRIM(MID([Owner], INSTR( [Owner], '/')+1)), '/')>0,LTRIM(MID(LTRIM(MID([Owner], INSTR( [Owner], '/')+1)),1,INSTR( LTRIM(MID([Owner], INSTR( [Owner], '/')+1)), '/')-1)),LTRIM(MID([Owner], INSTR( [Owner], '/')+1))) AS 'firstname',City FROM Policies";

DataTable Policies = new DataTable();

acessConn.Open();
OleDbCommand myAccessCommand = new OleDbCommand(acessquery, acessConn);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);
myDataAdapter.Fill(Policies);
acessConn.Close();

连接工作完美,但我有一个例外myDataAdapter.Fill(Policies);说:

“提供者无法确定 Object 值。例如,刚刚创建的行,Object 列的默认值不可用,消费者尚未设置新的 Object 值。”

注意:该查询适用于 Microsoft 访问。

连接字符串是:

string accconnstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + folderserverpath;` 

folderserverpath服务器上的数据库路径在哪里。

为什么我会收到此错误,解决方案是什么?

4

3 回答 3

5

使用SQL Server Migration Assistant for Access. 为了解决这个问题,我打开了有问题的 Access 数据库。然后我File > "Compact & Repair"。然后我保存并关闭了 Access 数据库。然后我重新导入数据库,它工作正常。

于 2017-03-20T21:18:34.860 回答
0

在您的查询中,可能存在一些“垃圾”或损坏的数据,可能是您的字符集无法证明的字符。我建议尝试在您的数据集中查找任何错误数据,或在此行中使用某种类型的“WHERE”子句:

string acessquery = "SELECT LTRIM(MID([Owner], 1, INSTR( [Owner],'/')-1)) AS 'lastname',
IIf( INSTR( LTRIM(MID([Owner], INSTR( [Owner], '/')+1)), '/')>0,
LTRIM(MID(LTRIM(MID([Owner], INSTR( [Owner], '/')+1)),1,
INSTR( LTRIM(MID([Owner], INSTR( [Owner], '/')+1)), '/')-1)),
LTRIM(MID([Owner], INSTR( [Owner], '/')+1))) AS 'firstname', 
City FROM Policies";
于 2016-02-10T19:44:15.490 回答
0

我对 Access 数据库也有同样的问题。我试图执行以下查询:

SELECT * FROM [Suppliers] WHERE ([CompanyID] = @Pm01)

但我遇到了同样的错误。我试图通过仅检索某些数据列而不是从数据表中检索所有数据列来找出问题所在。为此,我没有使用 *,而是使用了特定的数据列名称,例如 [CompanyName]、[CompanyID]。我将上述查询转换为以下内容:

SELECT [CompanyName], [CompanyID] FROM [Suppliers] WHERE ([CompanyID] = @Pm01)

我没有再看到错误,问题解决了。Microsoft Access 扩展库或 Access 数据库一定有问题。其中一个数据列中的数据可能与预期不同。我不知道为什么会出现这样的错误。

于 2020-07-19T11:41:49.377 回答