执行ExecuteReader()语句时使用SQLCE的ExceptionCode:0xc0000005

时间:2011-03-23 12:44:22

标签: c# windows-ce

我有这段代码:

 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

3 个答案:

答案 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,你的可能会有所不同)。安装到设备后,一切运行正常。