WinMobile 6.1 Prof. CE OS 5.2.20269 SqlserverCE 3.5。デバッグ時と展開時に問題が発生します。
テーブルから count(*) を選択すると、有効な結果と期待どおりのコード フローが得られます。
テーブルからフィールド名を選択すると、executereader はネイティブ例外をスローします。つまり、エラーは実行中のコードの外にあり、'catch' ステートメントは実行されません。
モバイル デバイスのエラーの詳細を調べると、エラーの dll が SqlCeDataReader.FillMetaData (initializeDataReader から呼び出される) の sqlceqp35.dll であることがわかります。
他の回答は、デバイスで sqlce.repl.ppc.wce4.armv4.CAB とその友人を使用することを示しています。デフォルトの「デバイス」オプションを使用してこれらをインストールしましたが、違いはありません。
WinMobile の経験は最小限なので、単純なものが欠けている可能性があります。
おかしなことに、アップストリームのデータベースに問題なく書き込みます。
接続文字列は次のとおりです。
private const string MsConn = @"Data Source=Program Files\Inspector\Inspector.sdf;Persist Security Info=False;";
データクラス関数は次のとおりです。
public int GetLogonId()
{
SqlCeConnection conn = new SqlCeConnection(MsConn);
conn.Open();
SqlCeCommand cmdSelect = conn.CreateCommand();
SqlCeDataReader r = null;
try
{
const string sqlSelect = "select inspector from Inspector";
//const string sqlSelect = "Select count(*) from Inspector"; This works
cmdSelect.CommandText = sqlSelect;
//cmdSelect.Prepare();
r = cmdSelect.ExecuteReader();//Native error here
return r.Read() ? r.GetInt32(0) : 0;
}
catch (Exception ex)
{
throw new Exception("GetLogonId " + ex.Message);
}
finally
{
conn.Close();
cmdSelect.Dispose();
}
}