J'ai utilisé cmd.Parameters.AddWithValue, et ne spécifiant pas DBType (int, varchar, ...) pour exécuter des requêtes. Après avoir regardé SQL Profiler, il semble que les requêtes exécutées avec cette méthode s'exécutent beaucoup plus lentement que lorsque vous spécifiez le type de données.AddWithValue sans DBType provoquant l'exécution lente des requêtes
Pour vous donner une idée de la lenteur, voici un exemple. La requête est une recherche simple sur une seule table et la colonne dans l'instruction where est indexée. Lors de la spécification du type de données, une certaine requête s'exécute dans environ 0 MS (trop petite pour le serveur SQL sur mesure), et nécessite 41 lectures. Lorsque je supprime le DBType, cela peut prendre environ 200 ms et 10000 lectures pour que la requête se termine. Je ne suis pas sûr si ce n'est que des valeurs de rapport incorrect de SQL Profiler, ou si ces valeurs sont correctes, mais il est reproductible, en ce que je peux ajouter et supprimer le DBType, et il produira les valeurs données dans SQL Profiler .
Quelqu'un d'autre a rencontré ce problème, et un moyen simple de le réparer. Je me rends compte que je pourrais ajouter du type de données partout dans mon code, mais cela semble être un tas de choses à ajouter, et s'il y a un moyen plus simple de le résoudre, ce serait très apprécié.
[EDIT]
Après quelques tests initiaux (les deux scénarios en cours d'exécution dans une boucle), il semble que les valeurs qui profileur donne sont exactes.
Tout comme les informations ajoutées, j'utilise .Net 2.0 sous Windows XP Pro et SQL Server 2000 sous Windows 2000 pour la base de données.
[UPDATE]
Après quelques creuser autour, j'ai pu trouver ce blog post, qui peut être liée. Semble que les valeurs de chaîne dans .Net (puisqu'elles sont unicode) sont automatiquement créées en tant que paramètres nvarchar. Je devrai attendre jusqu'à lundi quand je me mettrai au travail pour voir si je peux faire quelque chose autour de cela qui résout le problème. Pourtant, il semble que je devrais définir le type de données, ce que j'essayais d'éviter. Ce problème ne se présente pas avec toutes les requêtes que j'ai faites, mais seulement quelques-uns, donc je peux toujours utiliser le DBType dans les requêtes avec des problèmes, mais je cherche une solution plus généralisée à la question. problème.
Le paramètre en question est en fait un champ varchar , donc je ne pense pas que ce serait le problème. – Kibbee