我应该为每个查询打开和关闭数据库吗?

cho*_*obo 8 c# ado.net

我正在使用旧的学校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指出的那样).但是,在某些情况下,您会遇到使用此解决方案的性能瓶颈.

例如,在处理依赖于先前结果的大量相对快速执行的查询时,我可能建议在单个连接中执行多个查询.在进行数据批处理或数据按摩以进行报告时,您可能会遇到此问题.

无论您遵循哪种模式,始终务必使用'使用'包装以避免内存泄漏.