2010-03-19 2 views
1

ok maintenant j'utilise la base de données SQL pour obtenir les valeurs de différentes tables ... Je fais donc la connexion et obtenir les valeurs comme ceci:connexion SQL à la base de données répéter

DataTable dt = new DataTable(); 
SqlConnection connection = new SqlConnection(); 
connection.ConnectionString = ConfigurationManager.ConnectionStrings["XYZConnectionString"].ConnectionString; 
connection.Open(); 
SqlCommand sqlCmd = new SqlCommand("SELECT * FROM Machines", connection); 
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd); 

sqlCmd.Parameters.AddWithValue("@node", node); 
sqlDa.Fill(dt); 
connection.Close(); 

donc c'est une requête sur la page et j'appelle beaucoup d'autres questions sur la page.

Alors ai-je besoin d'ouvrir et de fermer la connexion à chaque fois ... ???

aussi sinon cette partie est commune dans tous:

DataTable dt = new DataTable(); 
SqlConnection connection = new SqlConnection(); 
connection.ConnectionString = ConfigurationManager.ConnectionStrings["XYZConnectionString"].ConnectionString; 
connection.Open(); 

puis-je mettre en Joue-la comme une fonction et l'appeler à la place .. le code regarderait ... plus propre i essayé de faire cela, mais je obtenir des erreurs telles que:

La connexion n'existe pas dans le contexte actuel.

suggestions ???

grâce

Répondre

6
  1. Vous pouvez certainement partager le code « connexion ouverte », aucune raison de le dupliquer.
  2. Avec le fournisseur SQL Server pour ASP.NET, il y a très peu de surcharge avec la "fermeture" de la connexion à chaque fois. Il retourne simplement la connexion à votre processus pool de connexion (voir here), ouvrant ainsi la prochaine connexion utilisera très peu de frais généraux. Je pense qu'il est bon de fermer la connexion après chaque opération
+0

Wish I Knew cela il y a longtemps ... –

1

En général oui, vous faites des connexions individuelles pour de multiples lignes.

Si vous pouvez utiliser pour produire un joint unique rowset significatif, qui est généralement une bonne chose à faire sur le côté serveur au lieu du côté client.

Vous pouvez également envisager de créer plusieurs connexions et d'utiliser les fonctions asynchrones afin de mettre en file d'attente toutes vos demandes simultanément plutôt que de manière séquentielle - avoir un look at this article.

5

J'utilise "l'aide". Vous pouvez inclure autant de requêtes que vous le souhaitez à l'intérieur. Une fois terminé, il nettoiera pour vous.

using (SqlConnection cn = new SqlConnection(connectionString)) 
{ 
    using (SqlCommand cm = new SqlCommand(commandString, cn)) 
    { 
     cn.Open(); 
     cm.ExecuteNonQuery(); 
    } 
} 
+0

+1 pour suggérer "à l'aide" –

1

Non, vous ne devez pas ouvrir et fermer la connexion à chaque fois aussi longtemps que vous utilisez la même base de données. Ce que vous devez changer est le

sqlCommand's queryString every time.

Comme quoi @durilai dit, [using] est utile. Using a réellement plus de fonctions que cela, mais essentiellement il met un bloc try/catch autour de votre code et les appels disposent pour fermer la connexion dans ce cas.

Tout ce qui a besoin d'ouverture/fermeture peut être utilisé avec l'aide, si des choses telles que les auteurs de texte ou d'autres objets.

Questions connexes