Comme on dit sur la radio - appelant longue durée premier appelant ....DataReader et SQLCommand
Voici mon problème. VS 2005 SQL Server 2005 Database. Application Windows Forms C#. Grande table - 780K dossiers. Je l'appellerai la table source. Vous devez faire une boucle dans la table source, et pour chaque enregistrement, faire quelque chose avec une autre table, puis réécrire dans la table source qu'elle a été complétée. Je n'ai pas encore mis à jour la deuxième table ...
Je parcourt tous les enregistrements de la table source à l'aide d'un lecteur de données à l'aide de l'objet de connexion A. Pour chaque enregistrement, je crée une instruction de mise à jour pour mettre à jour la table source pour indiquer que cet enregistrement a été traité - et utilisez une commande SQL par rapport à l'objet de connexion B pour effectuer cette opération. Donc différents objets de connexion car je sais que le dataReader veut une exclusivité.
Voici le problème. Après avoir traité les enregistrements X - où X semble avoir environ 60 ans - le délai d'attente de mise à jour. En écrivant ceci - drôle comment cela se passe n'est-ce pas - mon cerveau me dit que cela a à voir avec l'isolation des transactions et/ou le verrouillage ... c.-à-d. Je suis en train de lire les enregistrements source en utilisant un lecteur de données mais en changeant ces enregistrements ... Je peux voir cela causer des problèmes avec différentes isolations de transaction donc je vais regarder dans ...
Quiconque a vu ceci et sait comment résoudre il?
Vive
Pete
Impossible de le faire dans la base de données - des tonnes de logique RE mise à jour de la deuxième table que je veux écrire en C# - et ont déjà une partie du code pour. J'ai essayé nolock avant de revenir ici et cela a résolu le problème.Pourquoi la question suivante - l'exécution de la requête utilisée par le lecteur avec nolock ne bloque pas l'auteur - alors qu'est-ce que cela nous indique lorsque nous n'utilisons pas nolock - que les enregistrements sources sont verrouillés pendant la durée du lecteur de données? –
Oui, les enregistrements sont probablement verrouillés avec un verrou partagé pour la lecture (c'est-à-dire, pour s'assurer qu'ils sont cohérents pendant la durée de la lecture), donc aucune mise à jour ne peut être effectuée sur les enregistrements verrouillés. D'autres connexions pourraient voir les enregistrements, mais ne les modifient pas. –