C#进阶ADO.NET基础二 DataSet、配置文件、SqlHelper
来源:互联网 发布:刀剑乱舞胁差极化数据 编辑:程序博客网 时间:2024/05/16 01:58
一、程序中的小数据库: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]; } } }
- C#进阶ADO.NET基础二 DataSet、配置文件、SqlHelper
- C# ADO基础 SqlHelper
- 【Ado.Net】SQLHelper+配置文件+参数查询
- c# ado.net DataSet用法
- C#进阶ADO.NET基础一 基本概念、数据库连接操作基础
- ADO.NET基础02(语句参数化,配置文件,DataSet与DataTable)
- C# ADO SqlHelper
- C# 2008 学习笔记 - LINQ to ADO.NET(二)- LINQ to DataSet
- ADO.NET基础(二)
- ADO.NET操作封装(SqlHelper)
- ADO.NET DataSet
- 【ADO.NET】DataSet使用方法
- ADO.NET -- DataSet对象
- 细说:DataSet (ADO.NET)
- ADO.NET DataSet 数据模型
- ADO.NET DataSet:笔记
- C#进阶ADO.NET基础三 案例:登录框、导入文档、省市联动
- C#进阶ADO.NET基础四 复习、DBNull、三层架构只数据访问层
- hibernate中写配置文件xxx.hbm.xml时那个成员变量的类型type如何写的问题
- [leetcode] Add Binary
- hg0088开户
- 【英语学习】——APP推荐
- int main(int argc,char* argv[])详解
- C#进阶ADO.NET基础二 DataSet、配置文件、SqlHelper
- Hadoop RPC远程过程调用源码解析及实例
- 从多层感知器到卷积网络(二)
- SQL语句获取所有数据库名、表名、字段名、表字段长度
- 2015年5月信息系统项目管理师综合知识真题详解
- 矩阵替换
- netty学习之一:java.nio.ByteBuffer
- 文章标题
- Json数据解析