我正在使用旧的学校ADO.net与C#,所以有很多这种代码.为每个查询创建一个函数并每次打开和关闭数据库,或者使用相同的连接对象运行多个查询是否更好?以下只是一个查询,仅用于示例目的.
using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnectMain"].ConnectionString))
{
// Add user to database, so they can't vote multiple times
string sql = " insert into PollRespondents (PollId, MemberId) values (@PollId, @MemberId)";
SqlCommand sqlCmd = new SqlCommand(sql, connection);
sqlCmd.Parameters.Add("@PollId", SqlDbType.Int);
sqlCmd.Parameters["@PollId"].Value = PollId;
sqlCmd.Parameters.Add("@MemberId", SqlDbType.Int);
sqlCmd.Parameters["@MemberId"].Value = Session["MemberId"];
try
{
connection.Open();
Int32 rowsAffected = (int)sqlCmd.ExecuteNonQuery();
}
catch (Exception ex)
{
//Console.WriteLine(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 11
好吧,你可以衡量; 但只要你是using连接(所以即使你得到一个例外它们也被处理掉),并且启用了池(对于SQL服务器它默认是启用的)它并不重要; 关闭(或处理)只返回池的底层连接.两种方法都有效.对不起,这没什么用; p
在进行其他冗长的非数据库工作时,不要保持打开的连接.关上它并重新打开; 你可能实际上得到了相同的底层连接,但是其他人(另一个线程)可能已经使用它而你不是.
小智 7
对于大多数情况,每个查询打开和关闭一个连接是要走的路(正如Chris Lively指出的那样).但是,在某些情况下,您会遇到使用此解决方案的性能瓶颈.
例如,在处理依赖于先前结果的大量相对快速执行的查询时,我可能建议在单个连接中执行多个查询.在进行数据批处理或数据按摩以进行报告时,您可能会遇到此问题.
无论您遵循哪种模式,始终务必使用'使用'包装以避免内存泄漏.