Hey Guys私はWindows Mobile 5.0(.Net 2.0) で作業していますが、私の読者が常にnullになっている小さな問題に悩まされています。私の接続は正常ですし、私は他のすべてがうまくいくと信じています。唯一の問題は読者にあります。それはSqlCeDataReaderは常にnullです
((System.Data.SqlServerCe.SqlCeException)(e)) : {"The operation completed successfully."}
InnerException: Could not evaluate expression
私のデータベースファイルが破損していないと言う は私の例外キャッチで私は、アプリケーションの外にそれを開いて、すべてが正常に見えます。次のように 私のコードは次のとおりです。
public static List<Image> GetAll(BOI caller)
{
List<Image> images = new List<Image>();
SqlCeConnection c = Connection.GetConnection(caller.ConnectionString);
if (c != null)
{
SqlCeCommand command = new SqlCeCommand("SELECT * FROM Images", c);
SqlCeDataReader reader = null;
try
{
reader = command.ExecuteReader(); <<<<< reader is null <<<<<<<
}
catch (Exception e)
{
while (reader != null && reader.Read())
{
Image temp = new Image((int)reader["imageKey"],
(String)reader["filename"],
(byte[])reader["image"],
(reader["labelKey"] == DBNull.Value ? null : (int?)reader["labelKey"]),
(int)reader["priority"]);
temp.SetDBName(caller.ConnectionString);
images.Add(temp);
}
}
}
return images;
}
EDIT 私はConnection.GetConnection(..)での私の接続を開きます。
EDIT:2 e.StackTrace:
at System.Data.SqlServerCe.SqlCeDataReader.ProcessResults(Int32 hr)
at System.Data.SqlServerCe.SqlCeDataReader.FillMetaData(SqlCeCommand command)
at System.Data.SqlServerCe.SqlCeCommand.InitializeDataReader(SqlCeDataReader reader, Int32 resultType)
at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior behavior, String method, ResultSetOptions options)
at System.Data.SqlServerCe.SqlCeCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.SqlServerCe.SqlCeCommand.ExecuteReader()
at Oralys.BOI.DataAccess.ImageMapper.GetAll(BOI caller)
at Oralys.BOI.BOI.get_Images()
at Oralys.BOI.BOI_Controller.FetchAllImages()
at IdeoVoiceMobile.RunProfile.InitBOI()
at IdeoVoiceMobile.RunProfile..ctor()
at IdeoVoiceMobile.Program.startProfile()
at IdeoVoiceMobile.Program.Main()
取得接続機能:
public static SqlCeConnection GetConnection(string connectionString)
{
SqlCeConnection conn = null;
try
{
if (connections.Count == 0)
{
OpenConnection(connectionString);
}
conn = connections[connectionString];
}
catch (System.Exception)
{
}
return conn;
}
EDIT:3 例外コード使用
SqlCeCommand command = new SqlCeCommand("SELECT * FROM Images Where imageKey=6", c);
ExceptionCode: 0xc0000005
ExceptionAddress: 0x0115438c
Reading: 0x00000000
Faulting module: sqlceqp35.dll
Offset: 0x0001438c
at NativeMethods.GetKeyInfo(IntPtr pIUnknown, IntPtr pTx, String pwszBaseTable, IntPtr prgDbKeyInfo, Int32 cDbKeyInfo, IntPtr pError)
at SqlCeDataReader.FillMetaData(SqlCeCommand command)
at SqlCeCommand.InitializeDataReader(SqlCeDataReader reader, Int32 resultType)
at SqlCeCommand.ExecuteCommand(CommandBehavior behavior, String method, ResultSetOptions options)
at SqlCeCommand.ExecuteReader(CommandBehavior behavior)
at SqlCeCommand.ExecuteReader()
at ImageMapper.GetAll(BOI caller)
at BOI.get_Images()
at BOI_Controller.FetchAllImages()
at RunProfile.InitBOI()
at RunProfile..ctor()
at Program.startProfile()
at Program.Main()
次の数行のコードを表示すると便利です –
明示的に接続を開くことができません。それは 'GetConnection'ですか? – rrrr
私はそれを書くために私の質問を編集しようとしていました。 – raym0nd