我有这段代码:
string TmpMakat, TmpIsShakil, TmpDes;
SqlCeDataReader read;
public bool LOOK()
{
try
{
TmpMakat = "";
TmpIsShakil = "";
TmpDes = "";
Cmd.CommandType = CommandType.TableDirect;
Cmd.CommandText = "Items";
Cmd.IndexName = "A";
Cmd.SetRange(DbRangeOptions.Match, new object[] { txtMakat.Text }, null);
try
{
read = Cmd.ExecuteReader(); // <--- This is the Error
}
catch
{
MessageBox.Show("Error");
return false;
}
while (read.Read())
{
TmpMakat = read[0].ToString();
TmpIsShakil = read[1].ToString();
TmpDes = read[2].ToString();
}
read.Dispose();
if (TmpMakat == "")
{
TmpMakat = "";
TmpIsShakil = "";
TmpDes = "";
lblDes.Text = "";
lblQty.Text = "";
return false;
}
else
{
IsShakil = (TmpIsShakil == "1") ? true : false;
lblQty.Text = (IsShakil == true) ? "B" : "A";
lblDes.Text = TmpDes;
return true;
}
}
catch
{
return false;
}
}
但如果有任何错误 - 它永远不会进入捕获
我有时会收到此错误:
Error
A native exception has occurred in
myProg.exe.
Select Quit and then restart this program, or select Details
for more information.
当我按下更多细节时,我看到了:
Error
ExceptionCode: 0xc0000005
EceptionAddress: 0x41efaf7c
Reading: 0x00000000
Faulting module: sqlcese35.dll
Offset: 0x0005af7c
答案 0 :(得分:2)
ExceptionCode:0xc0000005
这是一个令人讨厌的问题,.NET中的AccessViolationException说话。显然,SQL Compact正在崩溃,它可能在工作线程中这样做,或者你的catch子句会捕获它。诊断这将是困难的,但从不信任数据库文件内容开始,它可能已损坏。考虑一个内存不足的问题,它是对空指针解除引用的轰炸。查找Microsoft的更新。
答案 1 :(得分:0)
错误发生在本机代码(SQL CE)中,所以
.NET紧凑框架无法捕获这种错误(不知道,会很奇怪,但很难忽略)
或错误发生在第一行,这是在try / catch块之外。
当你调用CreateCommand方法时,我们可以假设它调用SQL CE,第二种可能性更有可能。
您可以将作业放在try / catch块中吗?
答案 2 :(得分:0)
我有完全相同的错误,并且沮丧地拉扯我的头发,没有到达任何地方。我直接引用SQL CE dll并在部署期间将它们全部复制到设备,因此在我阅读上述解决方案后,我尝试删除所有文件并从头开始重新部署。这也行不通。最后,我使用
中的CAB文件将SQL Server CE 3.5 SP2直接安装到设备上C:\ Program Files(x86)\ Microsoft SQL Server Compact Edition \ v3.5 \ Devices \ wce500 \ armv4i \ sqlce.wce5.armv4i.cab (在我的情况下,ARMv4,你的可能会有所不同)。安装到设备后,一切运行正常。