Comment détecter si MARS est actif sur la connection en cours?

Je voudrais détecter si MARS (set de résultats multiples actifs) est actif sur la connection courante, afin de vérifier une mauvaise configuration dans une fonction qui a besoin du support de MARS.

Soit en utilisant une command TSQL, soit une méthode api .NET SQL Server Native Client.

Vous pouvez vérifier la propriété ConnectionSsortingng des connections pour la présence de l'atsortingbut MultipleActiveResultSets et, si elle est présente, assurez-vous qu'elle est définie sur true.

En fonction de votre utilisation du code, vous pouvez également vérifier la propriété SqlConnection.ServerVersion pour vérifier la prise en charge de MARS. Le nombre majeur doit être> = 9. (SQL Server 2005 et supérieur). Cela serait utile si votre code est utilisé sur différentes versions du server SQL.

Le SqlConnectionSsortingngBuilder pourrait également être utilisé en inverse (peut-être une idée étrange), il a une propriété MultipleActiveResultSets.

Si vérifier la string de connection (la meilleure option, IMO) ne fait pas appel … peut-être spoof délibérément quelque chose qui aurait besoin de MARS, par exemple ouvrir un lecteur de données sur deux lignes, lire l'une des lignes, et (sans fermer le lecteur) request une autre requête basée sur le lecteur.

Notez que la mise en memory tampon peut avoir un impact sur ceci, mais vaut la peine d'essayer …