web-dev-qa-db-fra.com

MultipleActiveResultSets = Connexions vraies ou multiples?

J'ai du C # dans lequel je crée un lecteur sur une connexion (ExecuteReader), puis pour chaque ligne de ce lecteur, j'exécute une autre commande (avec ExecuteNonQuery). Dans ce cas, vaut-il mieux que j'utilise MultipleActiveResultSets=True sur ma connexion ou utiliser plusieurs connexions?

73
Sprintstar

Plusieurs jeux de résultats actifs (MARS) ont été ajoutés spécifiquement pour ce type d'opération afin que vous n'ayez pas à ouvrir deux connexions en même temps pour pouvoir lire à partir d'un SqlDataReader ET exécuter des lots supplémentaires.

MARS est compatible avec SQL Server 2005 et supérieur. Pour citer des documents MSDN:

Avant l'introduction de plusieurs jeux de résultats actifs (MARS), les développeurs devaient utiliser plusieurs connexions ou des curseurs côté serveur pour résoudre certains scénarios.

Pour plus d'informations, voir:

Bibliothèque MSDN - Présentation MARS

Exemple travaillé de lecture et de mise à jour des données:

MSDN Library - Manipulating Data (MARS) faites défiler vers le bas jusqu'à 'Lecture et mise à jour des données avec MARS'

87
Kev

C'est autant que je sache la raison pour laquelle MARS a été ajouté, alors oui, je pense que vous devriez l'utiliser.

17
Rune Grimstad

Le meilleur moyen de tester cela est de lancer SQLServer Profiler et de voir ce qui se passe réellement du côté serveur.

Je suppose que ce ne sera pas mieux puisque vous utilisez ExecuteNonQuery (). Donc, en fait, vous ne travaillez pas avec plusieurs résultats.

0
dmajkic