2010-06-10 2 views
2

J'essaye de faire un TableAdapter.Fill (dataTable) et il échoue avec l'erreur ci-dessus. Voici le code dans ... DataSet.Designer.csSQLCEException n'a pas été gérée: Erreur interne: Impossible d'ouvrir la zone de mémoire partagée

[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
[global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)] 
public virtual int Fill(ZenwareDataSet.BatchPDADataTable dataTable) { 

    this.Adapter.SelectCommand = this.CommandCollection[0]; 
    if ((this.ClearBeforeFill == true)) { 
     dataTable.Clear(); 
    } 
    int returnValue = this.Adapter.Fill(dataTable); // <---Fails here. 
    return returnValue; 
} 

Ce code est généré. Peut-être qu'il y a quelque chose que je dois changer? Je me demande si mon application a plusieurs connexions à la base de données. Qu'est-ce que cela peut être? Merci pour toute l'aide que vous pouvez apporter.

  • appareil Windows Mobile 6.1 (Trimble Juno SB)
  • SQLServerCompact 3.5 Service Pack 2
  • Microsoft .NET CF 3,5
+0

Je connais des questions similaires. Mais c'est sur un appareil WinMo. Parfois, il semble intermédiaire, mais je peux le reprocher avec certains appels de mon application. Une fois que le problème est là, il continue jusqu'à ce que je redémarre l'appareil. Pendant le débogage, il semble que le problème a disparu, comme s'il y avait un délai assez long dû aux points de rupture, alors il n'y a pas de problème. La fonction ci-dessus semble appelée 3 fois. – dwaz

+0

J'ai changé la version de SQL Server CE pour les appareils WM en SP1 et le problème semblait disparaître, mais il est maintenant de retour. Est-ce que quelqu'un d'autre voit ce problème? – dwaz

Répondre

1

Il semble que la réponse à cette question est de faire que rien n'empêche une connexion ouverte. Comme j'avais hérité de ce problème, je n'étais pas au courant de tout ce qui pouvait contenir une connexion ouverte. Une fois que j'ai centralisé la connexion dans une seule fonction, je n'ai pas vu l'erreur.

+0

Utilisez également un singleton pour votre classe avec la connexion. N'effectuez le "connection.open" qu'une seule fois dans votre application. – dwaz

1

OK, est-ce que je me sens stupide. Même avec la réponse précédente, je voyais parfois le problème ci-dessus. Enfin je m'adresse à lui, et tout ce que je peux dire est, "Duh". Je ne fermais pas mes lecteurs, dans ce cas, SqlCeDataReader. Une fois que je ferme le lecteur, tout va bien. Ce qui rend ce problème difficile à comprendre, c'est qu'une fois que vous oubliez de fermer un lecteur dans votre application, c'est la prochaine fois que vous essayez de faire une opération de base de données que vous voyez le problème. D'ici là, vous avez oublié que le lecteur n'était pas fermé auparavant.

J'espère que cela aide quelqu'un. Je n'ai trouvé la réponse nulle part ailleurs, alors votez cette réponse si cela vous aide.

Questions connexes