繁体   English   中英

SQL CE本地异常0xc0000005

[英]sql ce native exception 0xc0000005

当我运行从ms sql ce读取一些数据的.net 3.5 cf应用程序时,有时会收到带有以下信息的本机异常:

ExceptionCode: 0xc0000005
ExceptionAddress : 0x44746e65 (variable)
Reading: 0x44746e64

at NativeMethods.GetKeyInfo(IntPtr pTx, String pwszBaseTable, IntPtr prgDbKeyInfo, Int32 cDbKeyInfo, IntPtr pError)

at SqlCeCommand.ExecuteReader(CommandBahavior behavior)

(... omitted for brevity)

at dadosGpsTableAdapter.GetDadosAEnviar()

我的GetDadosAEnviar查询非常简单:

SELECT        _id, Latitude, Longitude, Ignicao, Altitude, Velocidade,Direcao, Qualidade, Timestamp, Valido, Enviado, CondutorID
FROM            DadosGps
WHERE        (Enviado = 0)

调用此查询的代码是:

private bool SendRemainingData()
    {
        SetCurrentStatus("A Enviar historico");
        try
        {

            lock (lockObj)
            {
                DadosDataSet.DadosGpsDataTable dadosAEnviar = gpsAdapter.GetDadosEnviar();

                if (dadosAEnviar.Rows.Count > 0)
                {

                    foreach (DadosDataSet.DadosGpsRow amostra in dadosAEnviar.Rows)
                    {
                        bool resultado = webServicesGps.SendToServerGPSData(IMEI, amostra.Timestamp, amostra.Latitude, amostra.Longitude, Convert.ToDecimal(amostra.Altitude),
                            Convert.ToDecimal(amostra.Velocidade), Convert.ToDecimal(amostra.Direcao), new bool[] { amostra.Ignicao }, decimal.Zero, Convert.ToDecimal(amostra.Qualidade), "");

                        if (resultado)
                            gpsAdapter.RegistarEnvio(amostra._id);
                    }
                }
                dadosAEnviar.Dispose();
            }

(... omitted for brevity)

如您在先前的研究中所看到的,我被指示这可能是线程之间的同步问题,因此我将lock语句与

private static object lockObj=new object();

但是问题是当它调用GetDadosAEnviar时。 我可以做些什么来纠正这种行为?

UPDATE

经过更广泛的调试之后,我对导致异常的代码进行了框架化,将其放置在自动生成的代码或创建的代码上:

this.Adapter.SelectCommand = this.CommandCollection[3];
        DadosDataSet.DadosGpsDataTable dataTable = new DadosDataSet.DadosGpsDataTable();
        //Next line "barfs" an native exception
        this.Adapter.Fill(dataTable);
        return dataTable;

解决了它

该错误是由sqlce本机dll损坏引起的。 通过卸载并重新安装sqlce,一切正常。 更好的是,它更快,因为花费了时间来优化代码流,而不是使用库存VS样板代码

我有完全相同的错误,并且沮丧地把头发拔了出去,没到任何地方。 我直接引用了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可能有所不同)。 将其安装到设备后,一切运行正常。

是否在另一个线程上同时使用SqlCeConnection?

如果是这种情况,您可能也需要在那儿加锁。 要进行测试,请临时建立一个新连接,然后查看它是否可以解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM