le moyen idéal pour se connecter à la database?

public class SqlHelper { public SqlHelper() { } public static SqlConnection GetConnection() { SqlConnection conn = new SqlConnection(); conn.ConnectionSsortingng = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + System.Web.HttpContext.Current.Server.MapPath(@"~\App_Data\learn.mdf") + ";Integrated Security=True;User Instance=True"; return conn; } public static SqlDataReader ExecuteReader(ssortingng sql) { SqlConnection con = GetConnection(); con.Open(); SqlCommand cmd = new SqlCommand(sql, con); SqlDataReader dr = null; try { dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); } catch { con.Close(); return null; } return dr; } public static Object ExecuteScalar(ssortingng sql) { SqlConnection con = GetConnection(); con.Open(); SqlCommand cmd = new SqlCommand(sql, con); Object val = null; try { val = cmd.ExecuteScalar(); } catch { con.Close(); return null; } finally { con.Close(); } return val; } public static DataSet ExecuteDataSet(ssortingng sql) { SqlConnection con = GetConnection(); SqlCommand cmd = new SqlCommand(sql, con); DataSet ds = new DataSet(); SqlDataAdapter adapt = new SqlDataAdapter(cmd); try { adapt.Fill(ds); } catch { con.Close(); } return ds; } public static void ExecuteNonQuery(ssortingng sql) { SqlConnection con = GetConnection(); con.Open(); SqlCommand cmd = new SqlCommand(sql, con); try { cmd.ExecuteNonQuery(); } finally { con.Close(); } } } 

C'est la class que j'utilise pour implémenter chaque access à ma database. Mais je pense que la façon dont je fais la connection avec la database est un peu exagérée parce que je dois appuyer sur la fonction Connect chaque fois que j'ai besoin de quelque chose. Ainsi que d'autres users vont faire la même chose qui tue la performance.
Alors, quel est le moyen idéal pour se connecter à la database – et de restr connecté si c'est mieux. Notez que j'utilise la database dans plusieurs pages!
Merci

Tout d'abord, vous devez utiliser des instructions "using" pour vous assurer que tous vos objects ADO.NET sont correctement éliminés en cas d'échec:

 public static void ExecuteNonQuery(ssortingng sql) { using(var con = GetConnection()) { con.Open(); using(var cmd = new SqlCommand(sql, con)) { cmd.ExecuteNonQuery(); } } } 

Cependant, ceci dit, je ne vois pas vraiment de problème avec cette approche. L'avantage est que les connections, les commands, les adaptateurs et autres joysticks sont correctement éliminés chaque fois que vous exécutez un peu de SQL. Si vous deviez créer une seule instance SqlConnection statique, vous augmenteriez les chances que la connection soit déjà utilisée (lorsque, par exemple, vous itérez le contenu d'un SqlDataReader).

Si cela vous inquiète vraiment, fournissez des surcharges qui prennent une connection en tant que paramètre supplémentaire:

 public static void ExecuteNonQuery(ssortingng sql, SqlConnection connection) { using(var cmd = new SqlCommand(sql, con)) { cmd.ExecuteNonQuery(); } } 

De cette façon, les appelants peuvent soit exécuter un peu de SQL qui ne nécessite pas plusieurs appels, soit appeler votre GetConnectionMethod pour get une connection et la passer à plusieurs appels.

Si cela est utilisé pour un site Web, vous devez considérer qu'entre les requests de pages, même à partir du même browser, l'état de votre server sera détruit (en termes généraux), donc il n'y a rien à gagner à maintenir votre SQL connection entre les pages. C'est la première chose.

Si chaque page est le résultat d'une connection à une seule database, alors vous êtes probablement aussi optimisé que nécessaire, si vous faites plusieurs connections au cours de la génération d'une page, vous voudrez peut-être garder une connection active jusqu'à ce que vous ayez fini de récupérer datatables; soit en maintenant la connection ou en optimisant la récupération de vos données pour limiter les allers-returns entre votre application et la database.

La maintenance d'une connection à une database est le travail du pool de connections, et non du consommateur de connection. La meilleure pratique consiste à acquérir une connection le plus tard possible et à la libérer dès que possible.

 using(var connection = new SqlConnection(YourConnectionSsortingngHelperFunction()) { } 

Une chose que YOu pourrait prendre en considération est le PAttern d'dependency injection et un certain controller d'IoC. Si chaque page a besoin de cette connection pour en faire une propriété injectable (le constructor ne fonctionnera probablement pas si vous implémentez des classs d'infrastructure comme Request), utilisez un container (Unity, Castle, StructureMap). d'autres choses) et laissez le conteneur faire la magie (par magie, je veux dire des tonnes de code standard) pour vous. luke

D'abord vous pouvez écrire une class séparée comme ceci:

Get méthode pour get des données (avec une requête Select ) et une méthode Set pour manipuler des données (Insert, Update, Delete)

 using System.Data; using System.Data.Odbc; using System.Data.SqlClient; //using this you can replace instead odbc to sql // Example SqlCommand, SqlDataAdapter class DataBaseConnection { private OdbcConnection conn1 = new OdbcConnection(@"FILEDSN=C:/OTPub/Ot.dsn;" + "Uid=sa;" + "Pwd=otdata@123;"); //"DSN=Ot_DataODBC;" + "Uid=sa;" + "Pwd=otdata@123;" //insert,update,delete public int SetData(ssortingng query) { try { conn1.Open(); OdbcCommand command = new OdbcCommand(query, conn1); int rs = command.ExecuteNonQuery(); conn1.Close(); return rs; } catch (Exception ex) { conn1.Close(); throw ex; } } //select public System.Data.DataTable GetData(ssortingng sql) { try { conn1.Open(); OdbcDataAdapter adpt = new OdbcDataAdapter(sql, conn1); DataTable dt = new DataTable(); adpt.Fill(dt); conn1.Close(); return dt; } catch (Exception ex) { conn1.Close(); throw ex; } } } 

dans votre formulaire, vous pouvez rendre l'object à cette class de connection de database

  DataBaseConnection db = new DataBaseConnection(); 

maintenant vous appelez se mettre en place avec votre méthode get set comme suit

 ssortingng sqlSpecialHoliyday = "SELECT * FROM Holiday WHERE Date_Time='" + selectdate + "' AND IDH='50'"; DataTable dtAdditionalholily = db.GetData(sqlSpecialHoliyday); 

AD, vous pouvez définir des données en utilisant la méthode Set

 ssortingng insertloginlog = "INSERT INTO Login_Log (Service_No, Machine_Name) VALUES ('" + serviceID + "','" + machiname + "')"; int ret = db.SetData(insertloginlog); 

Espérons que cela aidera!