C# SqlHelper 详解(自己总结)

序言

数据库是我们常用的存储数据的容器,网上有很多关于SqlHelper 类库,里面有的写的很复杂很详细(有点冗余),有很多方法基本上用不到,所以自己根据很多的项目实践总结了一套适合自己的SqlHelper 类 包括 数据库的增、删、改、查、存储过程、事务等,以便后续使用,希望能给诸君有些帮助,如有错误麻烦请指出并纠正。

数据库的创建

  • 创建一个银行信息数据

use master

--- 判断 系统是否有数据库

if exists(select * from sys.databases where name = 'DBBank')

     drop database DBBank

--- 创建数据库

create database DBBank

on ---数据文本

(

     name = 'DBBank',    --逻辑名称

     filename = 'D:\C#\CommonLib\SQL\Data\DBBank.mdf',   --物理路径和名称

     size = 5MB,    -- 文件的初始大小

     filegrowth = 2MB   --文件的增长方式可以写大小,也可以写百分比

)

log on

(

   name = 'DBBank_log',

   filename = 'D:\C#\CommonLib\SQL\Data\DBBank_log.ldf',  --日志后缀 .ldf

   size = 5MB,

   filegrowth = 2MB

)

go

  • 创建 三个表 AccountInfo 账户信息表   BankCard 银行卡表   BankCard 转账信息表

use DBBank

-- 判断 表 AccountInfo 是否存在

if exists(select * from sys.objects where  name = 'AccountInfo' and type = 'U')

     drop table AccountInfo

go

Create table AccountInfo   --建表  账户信息表

(

     AccountId int primary key,    --账户Id 主键

     AccountCode varchar(20) check(len(AccountCode) = 18) unique,   -- 身份证号码 检查长度并且唯一

     AccountPhone varchar(11) check(len(AccountPhone) = 11),        --电话号码

     RealName nvarchar(10) not null,            --姓名

     OpenTime smalldatetime default(getdate())  --开户时间

)

if exists(select * from sys.objects where name = 'BankCard' and type = 'U')

     drop table BankCard

create table BankCard      --创建 银行卡表

(

     CardNo varchar(30) primary key ,     ---创建卡号 主键

     AccountId int not null,                   --账户编号(与账户信息表形成外键关系)

     CardPwd varchar(20) not null,      --账户密码

     CardMoney money check(CardMoney >= 0) NOT NULL,     --余额

     CardTime smalldatetime default(getdate())    --建卡时间

)

if exists(select * from sys.objects where name = 'CardExchange' and type = 'U')

     drop table CardExchange

create table CardExchange     --创建 转账信息表

(

     ExchangeId int primary key identity(1,1),     --交易自动编号

     CardNo varchar(30) not null,    --银行卡号

     MoneyInBank money ,    --存钱金额

     MoneyOutBank money,   --取钱金额

     ExchangeTime smalldatetime default(getdate())    --交易时间

)

  • 表关系图

SqlHelper类库编写

  • 新建一个类库 DbUtility

在类库中新建一个类 SqlHelper

二、连接字符串

/// <summary>

/// 连接字符串

/// </summary>

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

其中ConfigurationManager 需要添加引用

三 在SqlHelper类中编写增、删、改通用方法

3.1 在SqlHelper 类中编写增、删、改通用方法

 /// <summary>

/// 通用的增删改操作(普通的格式化SQL语句、带参数SQL语句、是否是存储过程)

/// </summary>

/// <param name="sql">SQL语句/存储过程名字</param>

/// <param name="isProcedure">存储过程</param>

/// <param name="paras">参数</param>

/// <returns></returns>

public static int ExecuteNonQuery(string sql,bool isProcedure = false, params SqlParameter[] paras)

{

    //select @@Identity 返回上一次插入记录时自动产生的ID

    int result = 0;

    SqlConnection conn = new SqlConnection(connStr);  //连接字符串

    try

    {

        if(conn == null)

            throw new ArgumentNullException("连接对象不能为空!");

        SqlCommand cmd = new SqlCommand(sql, conn);

        if(isProcedure)

            cmd.CommandType = CommandType.StoredProcedure;   //SqlCommand 设置成存储过程

        if (conn.State == ConnectionState.Closed)

            conn.Open();   //打开数据库               

        if (paras != null && paras.Length > 0)

        {

            cmd.Parameters.Clear(); //清空上一个数据

            cmd.Parameters.AddRange(paras); //添加本次数据

        }

        result = cmd.ExecuteNonQuery();

    }

    catch (Exception ex)

    {

        //如果有必要在这里写个记录日志

        string errorMessage = "调用ExecuteNonQuery方法发生异常:"+ex.Message;

        throw new Exception(errorMessage);

    }

    finally    //不管前面异常都会执行

    {

        conn.Close();

    }

    return result;

}

  1. 在WindowsFrom 测试
    1. 在新建一个WindowsFrom 测试程序

3.2.2  将Test 程序设置成 控制台应用程序

      1. 在App.config 文件中添加 connectionStrings注意一定要按照截图格式写,不能有多余的空格**

白色圈部分 是连接数据库的 服务器名、数据库名、账户和密码。

      1. 添加类库引用

      1. 测试SqlHelper 类中ExecuteNonQuery 方法
        1. SQL语句测试  向AccountInfo 增加一个开户信息

  /// <summary>

 /// SQL语句添加

 /// </summary>

 /// <param name="sender"></param>

 /// <param name="e"></param>

 private void btnAdd_Click(object sender, EventArgs e)

 {

     string sql = "insert into AccountInfo(AccountId,AccountCode,AccountPhone,RealName,Opentime)values(1,'320833200010112222','12345678900','李*','2021-12-18')";

     int i = SqlHelper.ExecuteNonQuery(sql, false, null);

 }

数据库中的结果

        1. SQL语句+参数的方式  向CardBank增加一个银行卡信息

 /// <summary>

/// SQL语句+参数

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btnAddParas_Click(object sender, EventArgs e)

{

    string sql = "insert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardTime)values" +

        "(@CardNo,@AccountId,@CardPwd,@CardMoney,@CardTime)";

    SqlParameter[] paras = new SqlParameter[]

    {

        new SqlParameter("@CardNo","6225125478544111"),

        new SqlParameter("@AccountId",1),   //注意 值类型不能为 0 ,如果是0 则需要装箱(object)0

        new SqlParameter("@CardPwd","888888"),

        new SqlParameter("@CardMoney",1000),

        new SqlParameter("CardTime",DateTime.Now.ToString())

    };

    int i = SqlHelper.ExecuteNonQuery(sql, false, paras);

}

数据库中的结果

        1. 存储过程  向AccountInfo 增加一个开户信息

在数据库中创建一个存取记录信息的存储过程

-----存储过程  也可以 proc    有参数输入无参数输出

if exists(select * from sys.objects where name = 'proc_AddCardExchange')

     drop procedure proc_AddCardExchange

go

create procedure proc_AddCardExchange

--存储过程输入参数的定义

@CardNo varchar(30),

@MoneyInBank money,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值