[MrYoung教程:易学之道]2ADONET基础之数据展现
一、前文回顾
在本系列第一篇文章中我们介绍了关系型数据库的概念,然后学习了如何使用企业管理器建立数据库表和添加数据,基础的SQL语句:查询,增加,修改,删除的用法,最后用我们讲解的知识实现了一个WINFORM的登陆窗体。二、概述
这将是[MrYoung教程:易学之道]ADONET基础系列文章的第二篇,在本篇中我们来关注数据展现问题,如何从数据库中取出数据并展示到我们的程序中,其中将讲述DATASET,SQLDATAADAPER和DATAGRIDVIEW控件。三、主要内容
3.1 USING的使用。3.2 DataSet介绍。
3.3 SqlDataAdapter介绍。
3.4 控件的数据绑定。
四、USING使用
4.1 Using(),作为语句,它主要用于定义一个范围,表示在此范围的末尾将释放对象。比如上文中我们在实例化SqlConnection对象,在使用完以后应该显示的调用该对象的CLOSE方法确保关闭对象,现在我们可以使用USING来实例化它,这样当使用完以后系统会帮我们自动释放掉该对象,如:
view sourceprint?1 //在括号内实例化对象,那么在花括号的代码执行完毕后系统将帮我们释放sqlcon对象2 using (SqlConnection sqlcon = new SqlConnection(connectionString))
3 {
4 sqlcon.open();
5 //DoSomeThing;
6 }
view sourceprint?
4.2 using 语句确保调用 Dispose,即使在调用对象上的方法时发生异常也是如此,其实try..catch也是运用的USING原理,感兴趣的大家可以去详细了解下。
4.3 强调调用Dispose使用using,强调异常处理使用try..catch
4.4 在学习了USING以后,我们来讲我们的BaseOperate重写,将所有方法和字段改为静态static,使用static的成员不用实例化即可直接使用,首先声明一个静态字符串connectionString用于保存字符串连接,然后写一个静态方法getStrcon用于获取字符串连接,声明一个静态构造函数,以便在调用本类时确保给connectionString正确赋值,代码如下:
view sourceprint?01 /// <summary>02 /// 数据库连接字符串
03 /// </summary>
04 public static string connectionString =null;
05
06 /// <summary>
07 /// 构造函数
08 /// </summary>
09 static BaseOperate()
10 {
11 connectionString = getStrcon();
12 }
13 /// <summary>
14 /// 获取数据库连接字符串
15 /// </summary>
16 /// <returns></returns>
17 public static string getStrcon()
18 {
19 return "packet size=4096;data source=127.0.0.1;persist security info=True;initial catalog=Db_Example;user id=sa";
20 }
接着把我们上文的getcom方法也改为静态方法,以便在使用完该方法后系统自动帮我们释放资源和对象:
view sourceprint?01 /// <summary>
02 /// 执行SQLCOMMAND命令
03 /// </summary>
04 /// <param name="str_sql">要执行的SQL语句</param>
05 public static void getcom(string str_sql)
06 {
07 using (SqlConnection sqlcon = new SqlConnection(connectionString))
08 {
09 using (SqlCommand sqlcom = new SqlCommand(str_sql, sqlcon))
10 {
11
12 sqlcon.Open();
13 sqlcom.ExecuteNonQuery();
14
15 }
16 }
17 }
而对于getread方法,因为要返回SqlDataReader对象,并且它是这样来实例化的sqlcom.ExecuteReader(CommandBehavior.CloseConnection),所以我们不使用USING,而是由调用者在使用完成后显示的关闭连接,同样我们也改写他为静态方法如下:
view sourceprint?01 /// <summary>
02 /// 创建SQLDATAREADER对象
03 /// </summary>
04 /// <param name="str_sql">要执行的SQL语句</param>
05 /// <returns>返回SQLDATAREADER对象</returns>
06 public static SqlDataReader getread(string str_sql)
07 {
08 SqlConnection sqlcon = new SqlConnection(connectionString);
09 SqlCommand sqlcom = new SqlCommand(str_sql, sqlcon);
10 sqlcon.Open();
11 SqlDataReader sqlread = sqlcom.ExecuteReader(CommandBehavior.CloseConnection);
12 return sqlread;
13
14 }
五、DATASET
5.1 DataSet 是 ADO.NET 结构的主要组件,它是从数据源中检索到的数据在内存中的缓存。 我们简单来讲,DATASET就是我们执行数据库查询语句SELECT后返给我们的结果集,他包含了我们查询的结果,并且是储存在内存中的。但DATASET并不仅限于数据库的查询。5.2 对于任何数据源,它都提供一致的关系编程模型。在DataSet中既定义了数据表的约束关系以及数据表之间的关系,还可以对数据表中的数据进行排序等。
5.3 独立性,既可以以离线方式,也可以以实时连接来操作数据库中的数据。
如上图所示,一个DATASET可以包含多个DATATABLE数据表,而一个数据表相当于我们数据库中的表,如TB_USERINFO,他具有行和列,当我们执行数据库查询后就会得到一个DATASET,如果我们查询的是TB_USERINFO的信息,那么在DATASET中就会存在一个表,他的序列为0(注意,一般我们都是已0开始计数,而不是1),表示为DATASET.TABLE[0]。在SQL中,我们可以通过SqlDataAdapter类执行查询,得到一个DATASET对象。
六、SqlDataAdapter
6.1 表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接
6.2 SqlDataAdapter 构造函数 (String, SqlConnection),他接受一个查询SQL的命令和一个数据库连接对象。
6.3 DbDataAdapter.Fill 方法 (DataSet),通过此方法,我们即可填充传入的DATASET形参从而获取查询结果。
下面我们来扩展我们的BaseOperate类,增加一个查询方法,返回一个DATASET,如下所示
view sourceprint?01 /// <summary>
02 /// 执行查询语句,返回DataSet
03 /// </summary>
04 /// <param name="SQLString">查询语句</param>
05 /// <returns>DataSet</returns>
06 public static DataSet getds(string str_sql)
07 {
08 //使用USING
09 using (SqlConnection sqlcon = new SqlConnection(connectionString))
10 {
11 //实例化一个DATASET对象
12 DataSet ds = new DataSet();
13 sqlcon.Open();
14 //实例化一个SqlDataAdapter对象
15 SqlDataAdapter sqldata = new SqlDataAdapter(str_sql, sqlcon);
16 //填充ds
17 sqldata.Fill(ds);
18 return ds;
19 }
20 }
七、COMBOBOX的数据绑定
在我们前文的登录界面中,我们的用户名需要
补充:Web开发 , ASP.Net ,