運行我的.NET CF 3.5的應用程序,讀取MS SQL CE的一些數據,有時我得到以下信息的機異常:SQL CE機異常0000005
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)
正如你可以看到在p revious研究,我有人指出,這可能是線程之間的同步問題,所以我用鎖語句的
private static object lockObj=new object();
但問題是,當它調用GetDadosAEnviar。我能做些什麼來糾正這種行爲?
UPDATE
更廣泛debbuging之後我陷害導致異常的代碼,它是在自動生成的代碼VS創建:
this.Adapter.SelectCommand = this.CommandCollection[3];
DadosDataSet.DadosGpsDataTable dataTable = new DadosDataSet.DadosGpsDataTable();
//Next line "barfs" an native exception
this.Adapter.Fill(dataTable);
return dataTable;
它不起作用。當它嘗試調用dataAdapter.fill方法時,該錯誤出現在vs2008自動生成的代碼中。看到更新後的帖子,代碼「barfs」異常 – Sorcerer86pt 2011-03-02 15:56:15
您是否嘗試在每個使用DataTable的地方放置一個鎖,或者您是否嘗試在每個地方打開一個新的連接? – jonathanpeppers 2011-03-02 19:16:20
創建新的連接,做東西,關閉連接。但我能通過刪除sqlce安裝並再次安裝它來解決它 – Sorcerer86pt 2011-03-03 16:10:34