簡體   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