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

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

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

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

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

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

 

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

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

用法:

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

//SqlDataReader是一个帮我们把SqlCommand执行结果填充到DataSet中
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);

2、创建一个DataSet对象

DataSet ds = new DataSet();

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

adapter.Fill(ds);

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

DataTable table = ds.Tables[0];

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

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

DataRowCollection rows = table.Rows;  //获得所有行集合

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

for (int i = 0; i < rows.Count; i++)
                    {
                        DataRow row = rows[i];
                        string name = (string)row["Name"];
                        int age = (int)row["Age"];
                        MessageBox.Show(name + "\t" + age.ToString());
                    }


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

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

用法:

1、新建一个配置文件:

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

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

2、在项目中添加引用:

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

using System.Configuration;

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

赋值方法:

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

从而取得连接字符串



三、封装自己的SqlHelper :

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

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

用法:

1、新建一个类SqlHelper

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

private static string connStr = ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString;

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

public static int ExecuteNonQuery(string sql,params SqlParameter[] pars)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;                   
                    cmd.Parameters.AddRange(pars);
                    return cmd.ExecuteNonQuery();
                }
            }
        }

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

public static object ExecuteScalar(string sql, params SqlParameter[] pars)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.Parameters.AddRange(pars); //读取pars
                    return cmd.ExecuteScalar();
                }
            }
        }


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

public static DataSet ExecuteDataSet(string sql, params SqlParameter[] pars)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.Parameters.AddRange(pars);
                    DataSet ds = new DataSet();
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    adapter.Fill(ds);
                    return ds;
                }
            }
        }


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

public static DataTable ExecuteDataTable(string sql, params SqlParameter[] pars)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.Parameters.AddRange(pars);
                    DataSet ds = new DataSet();
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    adapter.Fill(ds);
                    return ds.Tables[0];
                }
            }
        }



 


 

 


 


 

 

 

 

 

 


 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值