SQL/C# - la Meilleure méthode pour l'exécution d'une requête
J'ai besoin pour exécuter une requête sql à partir de l'intérieur d'une classe c#. J'ai pensé à 2 options
- De départ d'un processus de sqlcmd.
- À l'aide d'un objet SqlCommand.
Ma question est de savoir lequel serait le mieux? Il est important que la solution ne détient qu'une connexion au serveur pour un court laps de temps.
Je suis ouvert à d'autres idées, si le ci-dessus ne sont pas bons.
Merci d'avance.
- attendez-vous d'un ensemble d'enregistrements à retourner à votre application pour utiliser, ou vous êtes simplement essayez d'exécuter une requête et d'avancer?
- Voulez-vous plus précisément d'éviter le regroupement de connexion, ou êtes-vous juste essayer de suivre les meilleures pratiques en la matière?
- Désolé de ne pas être clair. Une requête est un insert et le résultat n'est pas nécessaire.
- Réponse tardive. sqlcmd.exe tourne beaucoup plus vite que SqlCommand. sqlcmd.exe a une option pour créer un fichier csv. À partir de c#, vous pouvez exécuter sqlcmd.exe à l'aide de la Classe de Processus. Le quand le Processus est terminé, vous pouvez lire le fichier csv en c#.
Vous devez vous connecter pour publier un commentaire.
Utiliser un SqlCommand. Ce code ne garder la connexion pour une très courte période de temps (tant que votre requête est performante):
De MSDN:
L'exemple suivant crée une occurrence de SqlConnection, SqlCommand, et un SqlDataReader. L'exemple se lit à travers les données, de les écrire sur la console. Enfin, l'exemple de la ferme de la SqlDataReader puis de l'occurrence de SqlConnection comme il en sort à l'Aide de blocs de code.
Il dépend. Si vous n'avez pas de soins sur le résultat de la requête de bifurquer un processus qui utilise sqlcmd pourrait être OK. Si d'autre part vous avez besoin de contrôler les résultats, il serait préférable d'utiliser ADO.NET. Pour éviter de garder la connexion ouverte pendant une longue période, assurez-vous de désactiver ADO.NET le regroupement de connexion en ajoutant
Pooling=false
à votre chaîne de connexion:Je pense que SqlCommand est un gagnant clair, parce que vous n'avez pas besoin de fil d'un processus différent. Vous pouvez fermer la connexion de base de données dès que vous avez terminé avec elle.
Et puis vous pouvez également distribuer l'application aux machines qui n'ont pas
sqlcmd
disponibles.Je pense que SqlCommand est une bonne idée, mais gardez à l'esprit que cette classe est disponible uniquement lors de la connexion à SQL Server. Vous aurez besoin d'un autre type de Commande de Connexion/classes, si vous faites affaire avec Oracle, ou une connexion OleDb à une autre base de données. Toutes les données de commande d'objets héritent de DbCommand, donc je lisais sur que.