SQL / C # – Meilleure méthode pour exécuter une requête

J’ai besoin d’exécuter une requête SQL à partir de la classe ac #. J’ai pensé à 2 options

  1. Démarrer un processus de sqlcmd.
  2. Utiliser un object SqlCommand.

Ma question est quelle serait la meilleure solution? Il est important que la solution ne conserve une connexion au serveur que pendant une courte période.

Je suis ouvert à d’autres idées si ce qui précède n’est pas bon.

Merci d’avance.

Utilisez un SqlCommand. Ce code ne gardera la connexion active que pendant une très courte période (tant que votre requête est performante):

DataTable results = new DataTable(); using(SqlConnection conn = new SqlConnection(connSsortingng)) using(SqlCommand command = new SqlCommand(query, conn)) using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command)) dataAdapter.Fill(results); 

De MSDN:

L’exemple suivant crée un SqlConnection, un SqlCommand et un SqlDataReader. L’exemple lit les données et les écrit sur la console. Enfin, l’exemple ferme le SqlDataReader, puis le SqlConnection lorsqu’il quitte les blocs de code Using.

 private static void ReadOrderData(ssortingng connectionSsortingng) { ssortingng querySsortingng = "SELECT OrderID, CustomerID FROM dbo.Orders;"; using (SqlConnection connection = new SqlConnection( connectionSsortingng)) { SqlCommand command = new SqlCommand( querySsortingng, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); try { while (reader.Read()) { Console.WriteLine(Ssortingng.Format("{0}, {1}", reader[0], reader[1])); } } finally { // Always call Close when done reading. reader.Close(); } } } 

Ça dépend. Si vous ne vous souciez pas du résultat de la requête, un processus utilisant sqlcmd peut être OK. Si par contre 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 longtemps, veillez à désactiver le regroupement de connexions ADO.NET en ajoutant Pooling=false à votre chaîne de connexion:

 using (var conn = new SqlConnection("Data Source=server;Initial Catalog=somedb;User Id=foo;Password=secret;Pooling=false")) using (var cmd = conn.CreateCommand()) { conn.Open(); cmd.CommandText = "DELETE FROM foo"; var result = cmd.ExecuteNonQuery(); } 

Je pense que SqlCommand est un gagnant clair, car vous n’avez pas besoin de câbler un processus différent. Vous pouvez fermer la connexion à la firebase database dès que vous en avez terminé.

Et ensuite, vous pouvez également dissortingbuer l’application sur des machines pour lesquelles sqlcmd n’est pas disponible.

Je pense que SqlCommand est une bonne idée, mais gardez à l’esprit que cette classe n’est disponible que lors de la connexion à SQL Server. Vous aurez besoin d’un autre type de classe Command / Connection si vous utilisez Oracle ou d’une connexion OleDb à une autre firebase database. Tous les objects de commande de données héritent de DbCommand , je voudrais donc lire à ce sujet.