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

请教一个sqlconnection打开关闭的问题..

public static DataTable SqlExecDatatable(string sqlstr, SqlParameter[] sp)
        {

            DataSet ds = new DataSet();
            using (SqlConnection conn = new SqlConnection(sqlconnstr))
            {
                SqlCommand cmd = new SqlCommand(sqlstr, conn);
                for (int i = 0; i < sp.Length; i++)
                {
                    cmd.Parameters.Add(sp[i]);
                }
                SqlDataAdapter ada = new SqlDataAdapter(cmd);
                ada.Fill(ds);
                return ds.Tables[0];
            }

        }

看到一段之前的程序员写的代码..这个方法是怎么打开和关闭数据库的? 
因为是初学者,对数据库的操作,应该了解哪方面的知识,或者资料推荐?
谢谢各位! --------------------编程问答-------------------- DataSet ,SqlDataAdapter 这种方式数据库是自动打开用完自动关闭的,可以参考MSDN或者买本书看,书上讲得很详细。
参考别人博文 --------------------编程问答-------------------- ada.Fill(ds)这句话内部会判断cmd关联的conn是否已经打开,如果没有打开,ada.Fill(ds)会自动打开conn,ada.Fill(ds)完成后,会把conn的打开状态恢复到ada.Fill之前的状态,
--------------------编程问答-------------------- 如果你没有用SqlDataAdapter,而是用cmd的ExecuteXXX方法,则在执行cmd之前必须自己用conn.Open打开连接,

如果你用SqlDataAdapter,那么可以调用conn.Open也可以不调用, --------------------编程问答-------------------- 1、SqlDataAdapter的Fill方法被调用的时候,会自动调用SqlConnection连接对象的Open方法
2、SqlDataAdapter的调用完Fill方法的时候,会自动关闭这个连接
3、当你的代码运行离开using后面的{}所包含的范围,那么在using后的()中声明的变量就会被释放,也就是说你声明的conn 不论是否是被SqlDataAdapter还是SqlCommand使用,在离开using后都会被释放,也就自动被关闭了。 --------------------编程问答-------------------- +1
引用 4 楼 mathieuxiao 的回复:
1、SqlDataAdapter的Fill方法被调用的时候,会自动调用SqlConnection连接对象的Open方法
2、SqlDataAdapter的调用完Fill方法的时候,会自动关闭这个连接
3、当你的代码运行离开using后面的{}所包含的范围,那么在using后的()中声明的变量就会被释放,也就是说你声明的conn 不论是否是被SqlDataAdapter还是SqlCommand使……

最好还是能自己加个con.oepn()和close()方法,也可以用using()来进行自动释放,这样也能避免没有释放,占用资源的话是很危险的 --------------------编程问答-------------------- 好帖子,新手学习了……………… --------------------编程问答-------------------- 好帖子,新手学习了……………… --------------------编程问答--------------------
引用 5 楼 liu_ben_qian 的回复:
最好还是能自己加个con.oepn()和close()方法,也可以用using()来进行自动释放,这样也能避免没有释放,占用资源的话是很危险的

这正好是涉及到SqlDataAdapter时最最最反对的作法!!!楼主你还是听4楼的,5楼这位简直是在混淆视听:-)

--------------------编程问答--------------------
引用 8 楼 namhyuk 的回复:
引用 5 楼 liu_ben_qian 的回复:
最好还是能自己加个con.oepn()和close()方法,也可以用using()来进行自动释放,这样也能避免没有释放,占用资源的话是很危险的
这正好是涉及到SqlDataAdapter时最最最反对的作法!!!楼主你还是听4楼的,5楼这位简直是在混淆视听:-)
--------------------编程问答-------------------- 这个问题就相当与DataSet与DataReader的区别,前者不需要数据库连接,而后者则需要连接好数据库 --------------------编程问答--------------------
引用 4 楼 mathieuxiao 的回复:
1、SqlDataAdapter的Fill方法被调用的时候,会自动调用SqlConnection连接对象的Open方法
2、SqlDataAdapter的调用完Fill方法的时候,会自动关闭这个连接
3、当你的代码运行离开using后面的{}所包含的范围,那么在using后的()中声明的变量就会被释放,也就是说你声明的conn 不论是否是被SqlDataAdapter还是SqlCommand使……

很好,有条理
是这样的,如果直接用SqlCommand的话就应该先Open
你现在这里是通过using关闭释放连接 --------------------编程问答-------------------- MSDN资料 
http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlconnection%28VS.80%29.aspx --------------------编程问答-------------------- 挺好! --------------------编程问答-------------------- 赞一个! --------------------编程问答-------------------- 亲,SqlDataAdapter   是自动打开个关闭连接的哦。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,