【SQL】【C#】存储过程

前言

上篇文章分享了一些有关于触发器的一些个人理解,今天我为大家分享一下存储过程的使用和C#交互的注意事项!

优点

存储过程使用:

  1. 简化我们D层的代码
  2. 方便我们后期的维护
  3. 提高了系统的安全性
  4. 提高了系统的运行速度

解释(一一对应):

  1. 我们使用存储过程之后,后端D层代码就剩下存储过程的引用!
  2. 如果数据库操作需要修改的话, 只需要修改数据库存储的SQL语句就可以,不需要修改系统代码
  3. 预防之前提到的SQL注入,减小了系统数据库操作的代码
  4. 存储过程的运行速度要快于系统调用SQL语句在传到数据库中要快

代码

注意:

  1. 我们创建存储过程的时候,注意做好注释和时间,方便后期的维护
  2. 注意存储过程的名字,因为我们后期调用起来会比较方便
  3. 注意参数的定义与传递

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语句都是写四个主方法:

  1. 含参查询
  2. 不含参查询
  3. 含参增删改
  4. 不含参增删改

其实我们可以多写四个不含Command参数的四个方法(利用方法的重载),这样的话,我们如果不调用存储过程的话,我们就可以不设置Command的参数类型,减小我们后期的一些工作量!

这是我的完整SQLHelper代码

后语

相同知识,每次学习都会有不同的收获!加油!



猜你喜欢

转载自blog.csdn.net/lk1822791193/article/details/80913501