【发布时间】:2013-09-08 04:45:09
【问题描述】:
我正在尝试将此查询应用于 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 值。”
注意:该查询正在 Microsoft 访问中运行。
连接字符串是:
string accconnstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + folderserverpath;`
其中folderserverpath 是服务器上的数据库路径。
为什么会出现这个错误,解决方法是什么?
【问题讨论】:
-
我建议尝试简化查询以查看错误在什么时候消失,或者从什么时候开始。像这样的带有所有这些功能的查询对我来说很可怕。我通常在设计期间采取措施避免这样的查询变得必要。我不确定,但您使用的提供程序处理 SQL 的方式可能与在 MS Access 环境中的处理方式不同。
-
我添加了 'where' 条件并且它起作用了。实际上我试图简化它,但很难简化它:)
-
所以您添加了一个 WHERE,它排除了某些在您的其他函数中不起作用的数据?换句话说,“坏数据”?
-
@kartal:如果您已经解决了自己的问题,请在此处发布并接受解决方案,以便其他有类似问题的人受益。
-
我在使用 OLE 对象时遇到了同样的问题,它是图像的列。它曾经工作,但后来这个错误开始出现,我不知道为什么?