DataSet的主要目的不就是为了实现在非持续连接下的操作.
微软为什么在ado.net中加入Dataset呢?
微软为什么在ado.net中加入Dataset呢?
解决方案 »
- 怎么把2M或更大的图片的大小 变成 500K以内呢
- 求教:如何控制这样的页面跳转?
- 各位前辈,你们觉得程序员向那方面发展比较有前途!!
- vs2008 是否支持SVG?
- 求教一道面试题
- 如何取得一个指定的文件夹中的文件的文件名和路径?
- c# web开发使用ListBox,ListBox1.SelectedIndex=-1 的问题!
- 请问,在调用“Fill”前,SelectCommand 属性尚未初始化。这个怎么解决?
- DataSet作为Crystal Report的报表源
- 怎样下载mms://wm.microsoft.com/ms/china/seminar/w2003/launch/17.asf这样的东西
- 思归兄,你们看这些关于DATAGRID问题能解决吗
- 分页问题:翻页之后再进行查询则不成功
----------------------------
Try
---------------------
SqlConnection.Open()
----------
mySqlCommand.ExecuteReader()
.......
......
----------
或者
mySqlCommand.ExecuteNonQuery()
------------
catch
..........
finally SqlConnection.Close()
end try
-----------------------------------------
-------------------------------
ADO.net有两种方法读数据:DataAdapter 和 DataReader(以SqlClient为例)
1、DataApapter 可用于填充数据集(DataSet),适用于读取多个表里的大量数据.用此对象时,SqlConnection可以显示的打开、关闭,也可以隐示的打开和关闭。用法如下://创建SqlConnection对象
string strConn = "server=;dataBase=;uid=;pwd=;";
SqlConnection conn = new SqlConnection(strConn);
//创建SqlDataAdapter对象
string strSQL = "SQL statement";
SqlDataAdapter adapter = new SqlDataAdapter(strSQL,conn);
//创建并填充DataSet
DataSet ds = new DataSet();
adapter.Fill(ds);//在这里objConn自动Open,然后自动Close填充多张表时:
conn.Open(); //在这里显示打开SqlConnection对象
adapter.SelectCommand = New SqlCommand(strSql1, conn);
adapter.SelectCommand.Parameters.Add("@TheYear", 1997);
adapter.SelectCommand.Parameters.Add("@TheQuantity", 30) ;
adapter.Fill(ds, "Orders");
adapter.SelectCommand = New SqlCommand(strSql2, conn) ;
adapter.Fill(ds, "Customers") ;
adapter.SelectCommand = New SqlCommand(strSql3, conn) ;
adapter.Fill(ds, "Employees") ;
conn.Close() ;//在这里显示关闭SqlConnection对象
2、DataReader相当于ADO里的RecordSet,适用于读取小量的数据,用此对象时必须显示的打开和关闭SqlConnection对象。加上错误处理后的用法如下:SqlCommand comm = new SqlCommand(strSql,conn);
SqlDataReader reader;
conn.Open();//注意SqlConnection对象必须在try块的外面Open,否则会报错!!
try
{
reader = comm.ExecuteReader();
while(reader.Read())
{
//
}
}
catch(SqlException se)
{
//
}
finally
{
conn.Close();
}DataAdapter的第二个例子也可以同样的加上错误处理,用法一样。
以上是我个人的理解,由不对的地方请高手指正!!
using(SqlConnection)
{
//do something
}
相当于一个try...catch...finally块
Hogwarts - S(u)ddenly dis@ppeared...
-
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
//创建SqlConnection对象
string strConn = "server=;dataBase=;uid=;pwd=;";
SqlConnection conn = new SqlConnection(strConn);
是在每一个操作时创建一次
还是初始化时就创建好,然后让他上直保持这个状态!
两者有何不同
Hogwarts - S(u)ddenly dis@ppeared...
-
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
当有大量的访问时,会建立大量的数据库连接,给造成服务器的负担,系统会变得不稳定。另一方面,如果对象的构造函数中使用了系统资源,如打开了文件或数据库连接,该应该使用Dispose模式,在dispose方法中释放资源,使用对象是要把对象申明在using中(这个using是一个语句,与使用命名空间不同,可以参考.net的帮助),超出using范围是系统会自动调用对象的dispose方法,要不然就自己手动管理。这样可以比较安全的使用数据库连接。可以参考visual studio .net中的duwamish的例子。
因为ASP.NET是用了连接池的,开关的消耗并不大的
我也一直在想这个问题,的确和很多人的看法一样,我也觉得每次OPEN,每次CLOSE 。但是,我现在有如下情况: 我在WEB工程中 写了一个数据访问类 Class DataAcess
{
//传入sGetFieldSQL返回一个DataTable
Public DataTable GetTable(string sGetFieldSQL)
{
……
}//传入sGetFieldSQL返回一个DataSet
Public DataSet GetTable(string sGetFieldSQL)
{
……
} //传入sSQL,更新数据表
public bool UpdateData(string sSQL)
{
……
}
//还有很多类似的方法,包括存储过程和以上方法的重载
} 然后我的WEB Solution中所有对数据库的访问操作都直接通过调用以上相关的方法来完成,现在有一个问题, 我的SQLConnection在那里来New,在那里来OPEN,什么时候CLOSE
有如下方法:
1. 我用一个Application变量来处理:在Global.asax中Application_Star中生成并OPEN SQLConnection,而在Application_End中来close。把以上的生成并打开的SQLConnection存放在Application中,而以上的方法中需要SQLConnection时候从Application中取得;
2.和方法1类似,也可以在 Global.asax的Global类中,定义一个SQLConnection类,new、OPEN、CLOSE操作和上同, 只是访问的时候不是从APPLICATION中取得SQLConnection,而是做为Global类中的一个Public属性(属性类型就是SQLConnection类拉)调用.我想只只是以上方法的“变种”,效率上应该是一样的!
3.我在以上DataAcess类的每个方法中,每次调用的时候都New并且OPEN一个SQLConnection,而通过Try……Catch……Finnally来保证方法调用完成后Close此SQLConnection;
4.我在DataAcess的构造函数中New 并且Open SQLConnection ,而在其析构函数中Close……
5.每个WEB页面需要调用DataAcess的时候,都New 并OPEN一个SQLConnection,而后访问DataAcess的时候传入 SQLConnection……
请大家帮我分析,以上几种方法中,那种最为合理和效率来得快!
注意,我的是WEB SOLUTION,或者还有什么更好的方法,请大家指点……