C#可视化编程——DBHelper工具类
- 介绍
DBHepler工具类,通过类将ADO.NET用方法封装起来,进而减少程序员的工作量。如连接数据库、数据库的增删改查方法等等。
需要注意一点,在DBHelper工具类中的公共字段和方法均使用静态方法,且static字段、方法、属性均属于class类,不属于某一个确定的对象,故访问它们时应当使用class类名,在访问非静态的属性、字段和方法时需要new一个新的对象。
try、catch、finally结构的区别:
try检测括号内代码正确与否,若错误不会结束程序,二十跳到catch中,输出catch中的代码;若正确则catch不执行。
finally语句无论是否错误均会执行。
- 如何编写DBHelper工具类
- 连接字符串
public static string connStr=”server:.;Initial Catalog=数据库名;Integrated Security=”True”;
- 声明所需要的对象
- SqlConnection类:主要用于连接Sql Server数据库
其常用属性有:ConnectionString——获取/设置用于打开数据库的字符串(即上一步设置的字符串),该连接字符串一般会在webconfig文件中配置。
常用方法:Open——用于打开SQL Sever数据库;Close——关闭现有打开的连接,如在程序中获取数据后,则调用该方法关闭数据库连接;CreateCommand——用于创建SqlCommand命令对象,该对象主要用于执行一些Sql语句。
- DataTable——用于临时保存数据的网络虚拟表,表示内存中数据的一个二维表,同时也是后台数据源和前台适配器之间的适配器。
几个常用属性:Columns——获取该表的列的集合;Rows——获取该表的行的集合;Constraints——获取由该表维护的约束的集合。
- SqlDataAdapte——Sql Server与DataSet间的桥接器,用于检索和保存数据
- SqlDataReader——主要用于读取查询类执行sql命令产生的查询结果或存储过程中返回的记录。注意SqlDataReader在指向第一条记录之前不可以直接读取,而是通过SqlDataReader.Read()方法读取下一条指令,直至全部读取完成。也可以使用Get方法来获取记录中某个字段的值,该方法可以将指定字段的数据按照特定的数据类型读取。访问字段还可以使用Item属性,其通过返回字段索引(注意索引从0开始)或字段名称对应的字段值。通常使用Command类中的ExecuteRader方法来创建DataReader对象。
- 针对连接对象,初始化数据库连接,判断连接是否为空、是否关闭和中断
- 执行sql语句,查看增删改查返回结果是否成功,这里会使用到SqlCommand命令对象执行命令
using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsStu
{
//dbhelper帮助工具
internal class DBHelper
{
//连接字符串
public static string connStr = "server=.;Initial Catalog=db_student;Integrated Security=True;";
//生命所需对象
public static SqlConnection conn = null;//连接对象
public static SqlCommand cmd = null;//命令对象
public static DataTable dt = null;//DataTable对象
public static SqlDataAdapter sda = null;//SqlDataAdapter对象
public static SqlDataReader dr = null;//SqlDataReader对象
public static void InitConnection()//初始化连接--针对连接对象
{
//判断连接对象是否为控股,为空则创建
if (conn == null)
{
conn = new SqlConnection(connStr);
}
//判断连接是否关闭,关闭则打开
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
//判断连接是否中断,若中断则重启
if (conn.State == ConnectionState.Broken)
{
conn.Close();
conn.Open();
}
}
//执行增删改查返回是否成功
public static bool ExecuteSql(string sql)
{
//打开连接
InitConnection();
//创建命令对象
SqlCommand cmd = new SqlCommand(sql,conn);
//执行命令
int result = cmd.ExecuteNonQuery();
//关闭连接
conn.Close();
//返回结果
/*return result > 0;*/
if (result > 0)
{
return true;
}
else
{
return false;
}
}
//执行查询,返回SqlDataReader对象--非断开式
public static SqlDataReader GetDataReader(string sql)
{
InitConnection();
//创建命令对象
cmd = new SqlCommand(sql,conn);
//执行命令返回SqlDataReader对象,并自动关闭连接对象
//这里使用CommandBehavior枚举的CloseConnection字段,用于关闭关联的DataReader和Connection对象
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
//执行查询
public static DataTable GetDataTable(string sql)
{
InitConnection();
//创建DataTable对象
dt = new DataTable();
//创建SqlDataAdapter对象
sda = new SqlDataAdapter(sql, conn);
//填充数据
sda.Fill(dt);
//关闭连接
conn.Close();
//返回DataTable对象
return dt;
}
//执行聚合函数,返回首行首列单个数据
public static object ExecuteScalar(string sql)
{
InitConnection();
//创建命令对象
cmd = new SqlCommand(sql, conn);
//执行命令,获取结果
object result = cmd.ExecuteScalar();
conn.Close();
return result;
}
//定义一个公共访问类,用于设置窗口跳转
internal class GlobalVar
{
private static string _StrPsp = "";//私有静态字段
//定义一个静态属性
public static string StrPsp
{
get
{
return _StrPsp;
}
set
{
_StrPsp = value;
}
}
}
}
}