【C#】存储过程应用

来源:互联网 发布:淘宝限时抢购软件 编辑:程序博客网 时间:2024/04/28 17:30

前言

  一直以来,写代码就是将sql语句写在了代码中,不过另一种形式也挺好玩的,把sql语句从代码中移到服务器端,也就是所说的存储过程。下面是用存储过程实现的登录Demo,算是笔记,如有错误,还请大神斧正。

代码展示

private void btnLogin_Click(object sender, EventArgs e){   string uid = txtUserName.Text.Trim();   string pwd = txtPassword.Text.Trim();   BLL.User user = new BLL.User();   DataTable result = user.SelectUser(uid,pwd);   if (result.Rows.Count > 0)   {       this.DialogResult = DialogResult.OK; //登录成功   }   else   {       MessageBox.Show("用户名或密码错误!","温馨提示");   }}
public class User{   SQLHelper sqlhelper = new SQLHelper();   /// <summary>   /// 根据参数返回查询的一行用户信息   /// </summary>   /// <param name="uid">用户名</param>   /// <param name="pwd">密码</param>   /// <returns></returns>   public DataTable SelectUser(string uid,string pwd)   {       SqlParameter[] sp = new SqlParameter[] {            new SqlParameter("@uid",uid),           new SqlParameter("@pwd",pwd)       };       return sqlhelper.ExecuteQuery("User_Select",sp,CommandType.StoredProcedure);   }}
public class SQLHelper{    public SqlConnection conn = null;    DataTable dt = new DataTable();    int res;    public SQLHelper()    {        //引用配置文件内容        string connstr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;        conn = new SqlConnection(connstr);    }    private SqlConnection GetConn()    {        if (conn.State == ConnectionState.Closed)        {            conn.Open();        }        return conn;    }    /// <summary>    /// 该方法执行带参数的增删改SQL语句或存储过程    /// </summary>    /// <param name="cmdText">增删改SQL语句或存储过程</param>    /// <param name="sp">参数集合</param>    /// <param name="ct">命令类型</param>    /// <returns></returns>    public int ExecuteNonQuery(string cmdText, SqlParameter[] sp, CommandType ct)    {        using (SqlCommand cmd = new SqlCommand(cmdText, GetConn()))        {            cmd.CommandType = ct;            cmd.Parameters.AddRange(sp);            res = cmd.ExecuteNonQuery();        }        return res;    }     /// <summary>    /// 该方法执行不带参数的增删改SQL语句或存储过程    /// </summary>    /// <param name="cmdText">增删改SQL语句或存储过程</param>    /// <param name="ct">命令类型</param>    /// <returns></returns>    public int ExecuteNonQuery(string cmdText, CommandType ct)    {        using (SqlCommand cmd = new SqlCommand(cmdText, GetConn()))        {            cmd.CommandType = ct;            res = cmd.ExecuteNonQuery();        }        return res;    }      /// <summary>    /// 该方法执行带参数的SQL查询语句或存储过程    /// </summary>    /// <param name="cmdText">SQL查询语句或存储过程</param>    /// <param name="sp">参数集合</param>    /// <param name="ct">命令类型</param>    /// <returns></returns>    public DataTable ExecuteQuery(string cmdText, SqlParameter[] sp, CommandType ct)    {        SqlCommand cmd = new SqlCommand(cmdText, GetConn());        cmd.Parameters.AddRange(sp);        cmd.CommandType = ct;        using (SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))        {            dt.Load(sdr);        }        return dt;    }     /// <summary>    /// 该方法执行不带参数的SQL查询语句或存储过程    /// </summary>    /// <param name="cmdText">SQL查询语句或存储过程</param>    /// <param name="ct">命令类型</param>    /// <returns></returns>    public DataTable ExecuteQuery(string cmdText, CommandType ct)    {        SqlCommand cmd = new SqlCommand(cmdText, GetConn());        cmd.CommandType = ct;        using (SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))        {            dt.Load(sdr);        }        return dt;    } }

存储过程

  上面的代码中,没有sql语句,只有一个存储过程的名字“User_Select”,因为我们将sql语句写到了服务端存储过程中。存储过程的建立步骤:打开SQL Server,找到对应数据库—可编程性—存储过程—右击新建即可,内容如下所示:

SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:      琚建飞-- Create date: 201742318:50:57-- Description: 判断登录用户是否存在-- =============================================ALTER PROCEDURE [dbo].[User_Select]@uid varchar(10), @pwd varchar(10) ASBEGIN    select * from Test where UserName=@uid AND Password=@pwdEND

注意:存储过程中的参数名要和代码中参数集合里的一致,否则会出错。

总结

  上面只是写了一个带参数的查询Demo,根据用户名和密码来查询用户是否存在。可以看到SQLHelper中还有不带参数的查询、带参数的增删改和不带参数的增删改,其实它们是一致的,做了一个,其他三个就是照葫芦画瓢即可。

1 0