前言
上篇文章分享了一些有关于触发器的一些个人理解,今天我为大家分享一下存储过程的使用和C#交互的注意事项!
优点
存储过程使用:
- 简化我们D层的代码
- 方便我们后期的维护
- 提高了系统的安全性
- 提高了系统的运行速度
解释(一一对应):
- 我们使用存储过程之后,后端D层代码就剩下存储过程的引用!
- 如果数据库操作需要修改的话, 只需要修改数据库存储的SQL语句就可以,不需要修改系统代码
- 预防之前提到的SQL注入,减小了系统数据库操作的代码
- 存储过程的运行速度要快于系统调用SQL语句在传到数据库中要快
代码
注意:
- 我们创建存储过程的时候,注意做好注释和时间,方便后期的维护
- 注意存储过程的名字,因为我们后期调用起来会比较方便
- 注意参数的定义与传递
SQL
下边的代码是新闻发布系统根据新闻内容查询新闻的存储过程!
USE [newssystem]
GO
/****** Object: StoredProcedure [dbo].[news_selectByContent] Script Date: 2018/7/5 9:47:43 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: 刘兵
-- Create date: 2018-06-23 17:54
-- Description: 根据内容查找新闻
-- =============================================
ALTER PROCEDURE [dbo].[news_selectByContent]
@content varchar(1000)
AS
BEGIN
select top 10 n.id,n.title,n.createTime,c.[name],n.caid from news n
inner join category c on n.caId =c.id
where n.title like '%' + @content+ '%'
order by n.createTime desc
END
C#
下边是我在D层的C#语句
/// <summary>
/// 根据新闻内容查询新闻
/// </summary>
/// <param name="content">新闻内容content</param>
/// <returns></returns>
public DataTable SelectByContent(string content)
{
DataTable dt = new DataTable(); //定义表格
string cmdText = "news_selectByContent"; //调用存储过程
SqlParameter[] paras = new SqlParameter[] //定义参数
{
new SqlParameter ("@content",content)
};
dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);//执行存储过程操作
return dt;
}
下边是SQLHelper的代码:
/// <summary>
/// 带参数的查询
/// </summary>
/// <param name="cmdtext">sql语句</param>
/// <param name="paras">参数</param>
/// <param name="ct">sql的类型</param>
/// <returns></returns>
public DataTable ExecuteQuery(string cmdtext, SqlParameter[] paras,CommandType ct)
{
DataTable dt = new DataTable();
cmd = new SqlCommand(cmdtext, GetConn());
cmd.Parameters.AddRange(paras);
cmd.CommandType = ct;
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(sdr);
}
return dt;
}
为什么要展示SQLHelper的代码呢?
答:大家注意Command这参数,这参数主要是为了识别系统用的是SQL语句进行数据库操作还是调用的存储过程!
Commande的三个属性:
属性 | 对应操作 |
StoredProcedure | 存储过程 |
TableDirect | 512表 |
text | SQL语句(系统默认) |
个人小建议
正常我们些SQLHelper语句都是写四个主方法:
- 含参查询
- 不含参查询
- 含参增删改
- 不含参增删改
其实我们可以多写四个不含Command参数的四个方法(利用方法的重载),这样的话,我们如果不调用存储过程的话,我们就可以不设置Command的参数类型,减小我们后期的一些工作量!
后语
相同知识,每次学习都会有不同的收获!加油!