WinMobile 6.1 教授 CE 操作系统 5.2.20269 SqlserverCE 3.5。调试和部署时问题很严重。
从表中选择 count(*) ,您将获得预期的有效结果和代码流。
从表中选择字段名称,executereader 会抛出本机异常。即错误在执行代码之外,'catch' 语句不执行。
深入研究移动设备上的错误详细信息显示错误 dll 是 SqlCeDataReader.FillMetaData 处的 sqlceqp35.dll(从 initializeDataReader 调用)
其他答案表明在设备上使用 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();
}
}