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);:

「プロバイダーはオブジェクト値を特定できませんでした。たとえば、行が作成されたばかりで、オブジェクト列のデフォルトが使用できず、コンシューマーがまだ新しいオブジェクト値を設定していませんでした。」

注 : クエリは Microsoft アクセスで動作しています。

接続文字列は次のとおりです。

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

folderserverpathサーバー上のデータベース パスです。

このエラーが発生した理由と解決策を教えてください。

4

3 に答える 3

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 に答える