第十二天 - ADO.NET 笔记

构建可重用的数据访问库

当想向某表提交SQL语句来实现修改的时间(如插入、删除、修改操作),就要用到ExecuteNonQuery()方法。

数据库代码的重用

  • 增加连接逻辑
    作用:连接、断开某个数据源
    代码:
public class InventoryDAL{
   private SqlConnection sqlCn = null;
   //连接数据源
   public void OpenConnection(string connectionString){
         sqlCn = new SqlConnection();
         sqlCn.ConnectionString = connectionString;
         sqlCn.Open();
   }
  //关闭数据源
   public void CloseConnection(){
        sqlCn.Close();
   }
}
  • 增加插入逻辑
    作用:增加新记录
    代码:
public void InsertAuto(int id,string color,string make,string petName){
    string sql = string.Format("Insert Into Inventory"+.....);
    //使用我们的连接执行
    using(SqlCommand cmd = new SqlCommand(sql,this.sqlCn){
          cmd.ExecuteNonQuery();
    }
}
  • 增加删除逻辑
  • 增加更新逻辑
  • 增加选择逻辑

使用参数化的命令对象

上述内容,都是使用字符串字面量来实现插入、更新和删除逻辑的,我们也可以使用参数化查询,能像对象那样处理SQL参数。
而且,参数化查询执行起来比纯文本的SQL语句快很多,并且可以消除SQL注入攻击。

例如:

using(SqlCommand cmd = new SqlCommand(sql,this.sqlCn)){
   //填充参数集合
   SqlParameter param = new SqlParameter();
   //设置DbParameter的名称
   param.ParameterName = "@CarID";
   //设置参数的值
   param.Value = id;
   //设置原始数据类型              
   param.SqlDbType = SqlDbType.Int;
   cmd.Parameters.Add(param);
   .........
   
   cmd.ExecuteNonQuery();
}

执行存储过程

在数据库中已有名为GetPetname的存储过程,格式如下:

GetPetName
@carID int,
@petName char(10) output
AS
SELECT @petName = PetName from Inventory where CarID = @carID

c#调用存储过程:

public string LookUpPetName(int carID){
     string carPetName = "";
     
     //设定存储过程名
     using( SqlCommand cmd = new SqlCommand("GetPetName",this.sqlCn)){
             cmd.CommandType = CommandType.StoredProcedure;
             //输入参数
             SqlParameter param = new SqlParameter();
             param.ParameterName = "@carID";
             param.Value = carID;
             param.SqlDbType = SqlDbType.Int;
             cmd.Parameters.Add(param);

             //输出参数
             param = new  SqlParameter();
             param.ParameterName = "@petName";
             param.SqlDbType = SqlDbType.Char;
             param.Size = 10;
             param.Direction = ParameterDirection.Output;
             cmd.Parameters.Add(param);

             //执行存储过程
             cmd.ExecuteNonQuery();
             carPetName = (string)cmd.Parameters["@petName"].Value;
     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值