打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#进阶ADO.NET基础二 DataSet、配置文件、SqlHelper

一、程序中的小数据库:DataSet

上一篇讲过的SqlDataReader的数据库查询结果并不是放到程序中的,而是放在数据库服务器中,SqlDataReader只是相当于放了一个指针(游标),

只能读取当前游标指向的行,一旦数据库断开就不能再读取,这样的好处在于程序不占内存。

而对于数据库来说,会给服务器带来压力,查询结果在服务器中,并且一直再连接状态,所以ADO.NET中提供了数据集的机制,

将查询结果填充到本地内存的小数据库对象中,这样断开数据库后,也不影响数据的读取

 

数据量大时,最好不要用DataSet,因为会很占程序内存。小数据量用DataSet,大数据量用SqlDataReader

DataSet的好处,降低数据库压力、提高效率、简化编程、优化数据库连接,提高安全性。

用法:

1、创建SqlDataAdapter对象,将SqlCommand命令对象作为参数。SqlDataAdapter类作用:将命令对象执行的SQL结果填充到DataSet对象中

[csharp] view plain copy
  1. //SqlDataReader是一个帮我们把SqlCommand执行结果填充到DataSet中  
  2.                     SqlDataAdapter adapter = new SqlDataAdapter(cmd);  

2、创建一个DataSet对象

[csharp] view plain copy
  1. DataSet ds = new DataSet();  

3、调用SqlDataAdapter对象的Fill()方法,将SQL执行结果填充到DataSet对象中

[csharp] view plain copy
  1. adapter.Fill(ds);  

4、调用DataSet对象的Table属性,返回一个数据表类DataTable的对象集合,并通过下标可以获得相应的数据表

[csharp] view plain copy
  1. DataTable table = ds.Tables[0];  

注意:一般来说查询过程都是在一个数据表中进行,所以查询结果一把只有一个表,用下标0即可获得该查询结果

5、调用数据表对象的Rows属性,返回一个数据行类DataRowCollection的对象集合

[csharp] view plain copy
  1. DataRowCollection rows = table.Rows;  //获得所有行集合  

6、通过循环,可以逐一读取数据库中的内容。

[csharp] view plain copy
  1. for (int i = 0; i < rows.Count; i++)  
  2.                     {  
  3.                         DataRow row = rows[i];  
  4.                         string name = (string)row["Name"];  
  5.                         int age = (int)row["Age"];  
  6.                         MessageBox.Show(name + "\t" + age.ToString());  
  7.                     }  


二、将连接字符串写到配置文件中

用处:方便管理并提高数据库安全性

用法:

1、新建一个配置文件:

项目---右键---添加---新建项----选“应用程序配置文件”---生成“app.config”文件---在文件中添加一个<connectionStrings>节点----将连接字符串放入标签中,并给该标签命名

  1. <configuration>  
  2.   <connectionStrings>  
  3.     <add name="dbConnStr" connectionString="Data Source=.;Initial Catalog=MyTest;Persist Security Info=True;User ID=sa;Password=123"/>  
  4.   </connectionStrings>  
  5. </configuration>  

2、在项目中添加引用:

引用--右键---添加引用---程序集----选择:System.Configuration---引入成功---在主程序中引入命名控件:

  1. using System.Configuration;  

3、在主程序中定义一个全局string变量,并通过System.Configuration下的ConfigurationManager给string变量赋值

赋值方法:

  1. string strConn = ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString;  

从而取得连接字符串



三、封装自己的SqlHelper :

封装方法的原则:把不变的放到方法里,把变化的放到参数中

好处:简化数据库操作、提高数据库效率

用法:

1、新建一个类SqlHelper

定义一个静态字符串变量:读取配置文件中的数据库连接字符串:

[csharp] view plain copy
  1. private static string connStr = ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString;  

2、重写ExecuteNonQuery方法,让主程序可以直接调用执行SQL语句

[csharp] view plain copy
  1. public static int ExecuteNonQuery(string sql,params SqlParameter[] pars)  
  2.         {  
  3.             using (SqlConnection conn = new SqlConnection(connStr))  
  4.             {  
  5.                 conn.Open();  
  6.                 using (SqlCommand cmd = conn.CreateCommand())  
  7.                 {  
  8.                     cmd.CommandText = sql;                     
  9.                     cmd.Parameters.AddRange(pars);  
  10.                     return cmd.ExecuteNonQuery();  
  11.                 }  
  12.             }  
  13.         }  

3、重写ExecuteScalar方法,让主程序可以直接调用执行SQL语句:

[csharp] view plain copy
  1. public static object ExecuteScalar(string sql, params SqlParameter[] pars)  
  2.         {  
  3.             using (SqlConnection conn = new SqlConnection(connStr))  
  4.             {  
  5.                 conn.Open();  
  6.                 using (SqlCommand cmd = conn.CreateCommand())  
  7.                 {  
  8.                     cmd.CommandText = sql;  
  9.                     cmd.Parameters.AddRange(pars); //读取pars  
  10.                     return cmd.ExecuteScalar();  
  11.                 }  
  12.             }  
  13.         }  


4、重写ExecuteDataSet方法,让主程序可以直接调用执行SQL语句:

[csharp] view plain copy
  1. public static DataSet ExecuteDataSet(string sql, params SqlParameter[] pars)  
  2.         {  
  3.             using (SqlConnection conn = new SqlConnection(connStr))  
  4.             {  
  5.                 conn.Open();  
  6.                 using (SqlCommand cmd = conn.CreateCommand())  
  7.                 {  
  8.                     cmd.CommandText = sql;  
  9.                     cmd.Parameters.AddRange(pars);  
  10.                     DataSet ds = new DataSet();  
  11.                     SqlDataAdapter adapter = new SqlDataAdapter(cmd);  
  12.                     adapter.Fill(ds);  
  13.                     return ds;  
  14.                 }  
  15.             }  
  16.         }  


5、因查询数据库一般在一个数据表中完成,所以返回的DataSet一般也只有一个表,可以将ExecuteDataSet简化成ExecuteDataTable:

[csharp] view plain copy
  1. public static DataTable ExecuteDataTable(string sql, params SqlParameter[] pars)  
  2.         {  
  3.             using (SqlConnection conn = new SqlConnection(connStr))  
  4.             {  
  5.                 conn.Open();  
  6.                 using (SqlCommand cmd = conn.CreateCommand())  
  7.                 {  
  8.                     cmd.CommandText = sql;  
  9.                     cmd.Parameters.AddRange(pars);  
  10.                     DataSet ds = new DataSet();  
  11.                     SqlDataAdapter adapter = new SqlDataAdapter(cmd);  
  12.                     adapter.Fill(ds);  
  13.                     return ds.Tables[0];  
  14.                 }  
  15.             }  
  16.         }  



 


 

 


 


 

 

 

 

 

 


 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Visual C#中动态操作SQL Server数据库
C#中comm5种处理SQL语句方法
c#+sql
C#连接SQL SERVER数据库的详细步骤!
Dbconn 连接问题
UpdatePanel异步回送实例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服