当前位置:编程学习 > C#/ASP.NET >>

请问代码里面的sqlCon需要Close吗?


/// <summary>
        /// 创建SqlDataAdapter对象
        /// </summary>
        /// <param name="procName">存储过程的名称</param>
        /// <param name="prams">存储过程所需参数</param>
        /// <returns>返回SqlDataAdapter对象</returns>
        private static SqlDataAdapter CreateSqlDataAdapter(string procName,
            params SqlParameter[] prams)
        {   ///创建数据库连接
            SqlConnection sqlCon = CreateSqlConnection();
            ///打开数据库连接
            if (sqlCon == null) return null;
            if (sqlCon.State == ConnectionState.Closed)
            {
                sqlCon.Open();
            }
            ///设置SqlDataAdapter的属性
            SqlDataAdapter da = new SqlDataAdapter(procName, sqlCon);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;

            ///添加存储过程参数
            if (prams != null)
            {
                foreach (SqlParameter parameter in prams)
                {
                    da.SelectCommand.Parameters.Add(parameter);
                }
            }
            
            ///添加返回参数
            da.SelectCommand.Parameters.Add(new SqlParameter(returnValueString,
                SqlDbType.Int, 4, ParameterDirection.ReturnValue,
                false, 0, 0, string.Empty, DataRowVersion.Default, null));

            ///返回SqlDataAdapter对象
            return da;
        }
--------------------编程问答-------------------- 要呀,释放资源! --------------------编程问答-------------------- 要的. --------------------编程问答--------------------  finally
            {
                if (connection != null)
                {
                    connection.Close();
                    connection.Dispose();
                }
                if (command != null)
                {
                    command.Dispose();
                }
            } --------------------编程问答-------------------- 要
一般在try{}catch{}finially{}结构中写在finailly中 --------------------编程问答-------------------- 这是肯定要的。

因为比较多使用SqlHelper之类的东西,SqlHelper里面,一般都是使用using来自动释放资源的吧。。。

--------------------编程问答-------------------- 那我应该怎么调整呢??? --------------------编程问答-------------------- 对的,要释放资源,,或者使用using

数据库连接是要手动释放资源的。 --------------------编程问答--------------------  SqlConnection sqlconn = new SqlConnection(SqlHelper._connectionString);
 sqlconn.Open();
 SqlCommand sqlcomm = new SqlCommand(sqlString, sqlconn);
 SqlDataReader reader = sqlcomm.ExecuteReader();
 ...
 reader.Close();
 sqlcomm.Dispose();
 sqlconn.Close(); --------------------编程问答-------------------- 使用using(){}结构写这类代码,不需要显示执行Close()。 --------------------编程问答-------------------- 谁能帮我在原有代码的基础上,进行一下优化啊?? --------------------编程问答-------------------- 是这样?????

/// <summary>
        /// 创建SqlDataAdapter对象
        /// </summary>
        /// <param name="procName">存储过程的名称</param>
        /// <param name="prams">存储过程所需参数</param>
        /// <returns>返回SqlDataAdapter对象</returns>
        private static SqlDataAdapter CreateSqlDataAdapter(string procName,
            params SqlParameter[] prams)
        {            
            ///创建数据库连接
            SqlConnection sqlCon = CreateSqlConnection();
            using (sqlCon)
            {
                ///打开数据库连接
                if (sqlCon == null) return null;
                if (sqlCon.State == ConnectionState.Closed)
                {
                    sqlCon.Open();
                }
                ///设置SqlDataAdapter的属性
                SqlDataAdapter da = new SqlDataAdapter(procName, sqlCon);
                da.SelectCommand.CommandType = CommandType.StoredProcedure;

                ///添加存储过程参数
                if (prams != null)
                {
                    foreach (SqlParameter parameter in prams)
                    {
                        da.SelectCommand.Parameters.Add(parameter);
                    }
                }

                ///添加返回参数
                da.SelectCommand.Parameters.Add(new SqlParameter(returnValueString,
                    SqlDbType.Int, 4, ParameterDirection.ReturnValue,
                    false, 0, 0, string.Empty, DataRowVersion.Default, null));

                ///返回SqlDataAdapter对象
                return da;
            }
        }

--------------------编程问答--------------------

        /// <summary>
        /// 创建SqlDataAdapter对象
        /// </summary>
        /// <param name="procName">存储过程的名称</param>
        /// <param name="prams">存储过程所需参数</param>
        /// <returns>返回SqlDataAdapter对象</returns>
        private static SqlDataAdapter CreateSqlDataAdapter(string procName,
            params SqlParameter[] prams)
        {   ///创建数据库连接
            SqlConnection sqlCon = CreateSqlConnection();
            try
            {
                ///打开数据库连接
                if (sqlCon == null) return null;
                if (sqlCon.State == ConnectionState.Closed)
                {
                    sqlCon.Open();
                }
                ///设置SqlDataAdapter的属性
                SqlDataAdapter da = new SqlDataAdapter(procName, sqlCon);
                da.SelectCommand.CommandType = CommandType.StoredProcedure;

                ///添加存储过程参数
                if (prams != null)
                {
                    foreach (SqlParameter parameter in prams)
                    {
                        da.SelectCommand.Parameters.Add(parameter);
                    }
                }

                ///添加返回参数
                da.SelectCommand.Parameters.Add(new SqlParameter(returnValueString,
                    SqlDbType.Int, 4, ParameterDirection.ReturnValue,
                    false, 0, 0, string.Empty, DataRowVersion.Default, null));

                ///返回SqlDataAdapter对象
                return da;
            }
            catch
            {
                return null;
            }
            finally
            {
                if (sqlCon != null)
                {
                    sqlCon.Close();
                }
            }
        }
--------------------编程问答-------------------- using也可以 建议用using --------------------编程问答--------------------

using(SqlConnection sqlCon = CreateSqlConnection())
{
    ...your code
}
--------------------编程问答-------------------- 有始有终么 有打开就有关闭 --------------------编程问答-------------------- 要得,养成好习惯! --------------------编程问答-------------------- using (SqlConnection conn = new SqlConnection(connectionString))
{
     your code;
}

其实直接使用SqlHelper不好么。。。 --------------------编程问答-------------------- 这里的return (new SqlConnection(conStr));要关闭吗????

/// <summary>
        /// 创建连接.
        /// </summary>
        private static SqlConnection CreateSqlConnection()
        {   ///获取连接字符串
            string conStr = (string)Cache.GetData(connectionStringNameInWebConfig);

            if (string.IsNullOrEmpty(conStr))
            {
                try
                {   ///如果连接字符串为空,则从配置文件中获取连接字符串
                    conStr = ConfigurationManager.ConnectionStrings[connectionStringNameInWebConfig].ConnectionString;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message, ex);
                }
                ///把字符串添加到缓存中
                Cache.CachingData(connectionStringNameInWebConfig, conStr);
            }
            if (!string.IsNullOrEmpty(conStr))
            { /// 创建数据库连接
                return (new SqlConnection(conStr));
            }
            return null;
        }
--------------------编程问答-------------------- 使用using(){}写这类代码,就不需要执行Close()。 --------------------编程问答--------------------
引用 18 楼 david1030 的回复:
这里的return (new SqlConnection(conStr));要关闭吗????
C# code///<summary>/// 创建连接.///</summary>privatestatic SqlConnection CreateSqlConnection()
        {///获取连接字符串string conStr= (string)Cache.GetData(connectionStringNameInWebConfig);if (string.IsNullOrEmpty(conStr))
            {try
                {///如果连接字符串为空,则从配置文件中获取连接字符串                    conStr= ConfigurationManager.ConnectionStrings[connectionStringNameInWebConfig].ConnectionString;
                }catch (Exception ex)
                {thrownew Exception(ex.Message, ex);
                }///把字符串添加到缓存中                Cache.CachingData(connectionStringNameInWebConfig, conStr);
            }if (!string.IsNullOrEmpty(conStr))
            {/// 创建数据库连接return (new SqlConnection(conStr));
            }returnnull;
        }

using不用释放 --------------------编程问答-------------------- 强烈建议,using --------------------编程问答-------------------- 楼主的帖子都是无满意结贴,建议不要回复他,易做图此ID --------------------编程问答-------------------- 最简单的方法:return前加句sqlcon.Close(); --------------------编程问答-------------------- 还好意思发帖问问题是么。。看看你的结贴。。建议易做图
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,