SqlParameter参数方式操作数据库(存储过程)

DataBase.cs

View Code
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

/// <summary>
///DataBase 的摘要说明
/// </summary>
public class DataBase
{
    //私有变量,数据库连接
    protected SqlConnection Connection;
    protected string ConnectionString;
    //构造函数
    public DataBase()
    {
        ConnectionString = ConfigurationSettings.AppSettings["strCon"];
    }
    //保护方法,打开数据库连接
    private void Open()
    {
        //判断数据库是否连接
        if(Connection == null)
        {
            //不存在,新建并打开
            Connection = new SqlConnection(ConnectionString);
            Connection.Open();
        }
        else
        {
            //存在,判断是否处于关闭状态
            if(Connection.State.Equals(ConnectionState.Closed))
               Connection.Open();//连接处于关闭状态,重新打开
        }
    }
    //公有方法,关闭数据库连接
    public void Close()
    {
        if (Connection.State.Equals(ConnectionState.Open))
        {
            Connection.Close();//连接处于打开状态,关闭连接
        }
    }
    //公有方法,释放资源
    public void Dispose()
    {
        if (Connection != null)
        {
            Connection.Dispose();
            Connection = null;
        }
    }
    //私有方法,获得一个用来调用存储过程的SqlCommand
    //输入:
    //      ProcName - 存储过程名
    //      Params   - 用来调用存储过程的参数表
    public SqlCommand CreatCommand(string ProcName, SqlParameter[] Prams)
    {
        //打开数据库连接
        Open();
        //创建一个命令对象
        SqlCommand Cmd = new SqlCommand(ProcName, Connection);
        //指定命令对象的类型为存储过程
        Cmd.CommandType = CommandType.StoredProcedure;
        // 依次把参数传入命令文本
        if (Prams != null)
        {
            foreach (SqlParameter Parameter in Prams)
                Cmd.Parameters.Add(Parameter);
        }
        return Cmd;
    }
       /// <summary>
    /// 初始化参数值
    /// </summary>
    /// <param name="ParamName">存储过程名称或命令文本</param>
    /// <param name="DbType">参数类型</param>
    /// <param name="Size">参数大小</param>
    /// <param name="Direction">参数方向</param>
    /// <param name="Value">参数值</param>
    /// <returns>新的 parameter 对象</returns>
    public SqlParameter MakeParam(string ParamName,SqlDbType DbType, Int32 Size,ParameterDirection Direction,object Value)
    {
        SqlParameter Param;
        if(Size>0)
            Param = new SqlParameter(ParamName,DbType,Size);
        else 
            Param = new SqlParameter(ParamName,DbType);
        Param.Direction = Direction;
        if(!(Direction == ParameterDirection.Output && Value == null))
            Param.Value = Value;
        return Param;
    }
    //公有方法,实例化一个用于调用存储过程的输入参数
    //输入:
    //     ParamName - 参数名称
    //     DbType   -  参数类型
    //     Size     - 参数大小 
    //     Value     - 值
    public SqlParameter MakeInParam(string ParamName, SqlDbType DbTpye, int Size, object Value)
    {
        return MakeParam(ParamName, DbTpye, Size, ParameterDirection.Input, Value);
    }
    //公有方法,调用存储过程(带参数)
    //输入:
    //      ProcName - 存储过程名
    //      Params   - 用来调用存储过程的参数表
    //输出:
    //      对Update、Insert、Delete操作返回影响到的行数,其他情况为-1
    public int RunProc(string ProcName, SqlParameter[] Params)
    {
        int Count = -1;
        SqlCommand Cmd = CreatCommand(ProcName, Params);
        Count = Cmd.ExecuteNonQuery();
        Close();
        return Count;
    }
    //公有方法,调用存储过程(不带参数)
    //输入:
    //            ProcName存储过程名
    //输出:
    //            将执行结果以DataSet返回  
    public DataSet GetDataSet(string ProcName)
    {
        Open();
        SqlDataAdapter da = new SqlDataAdapter(ProcName, Connection);
        DataSet ds = new DataSet();
        da.Fill(ds);
        Close();
        return ds;
    }

    //公有方法,调用存储过程(带参数)
    //输入:
    //            ProcName - 存储过程名
    //      Params     - 存储过程需要的参数
    //输出:
    //            将执行结果以SqlDataReader返回
    //注意:使用后主意调用SqlDataReader.Close()方法
    public SqlDataReader RunProcGetReader(string ProcName, SqlParameter[] Params)
    {
        SqlCommand Cmd = CreatCommand(ProcName, Params);
        return Cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
    }
}


Users.cs

View Code
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

/// <summary>
///Users 的摘要说明
/// </summary>
public class Users
{
    #region 私有成员
    private string _userID;
    private string _userPwd;
    private string _userName;
    #endregion 私有成员

    #region 属性
    public string UserID
    {
        set
        {
            this._userID = value;
        }
        get
        {
            return this._userID;
        }
    }
    public string UserPwd
    {
        set
        {
            this._userPwd = value;
        }
        get
        {
            return this._userPwd;
        }
    }
    public string UserName
    {
        set
        {
            this._userName = value;
        }
        get
        {
            return this._userName;
        }
    }
    #endregion 属性

    #region 方法
    //向Users表中添加用户信息(采用存储过程)
    //输出:
    //      插入成功:返回True;
    //      插入失败:返回False;
    public bool InsertByProc()
    {
        SqlParameter[] Params = new SqlParameter[3];
        DataBase mydb = new DataBase();
        //用户编号
        Params[0] = mydb.MakeInParam("@UserID", SqlDbType.VarChar, 50, UserID);
        //用户姓名
        Params[1] = mydb.MakeInParam("@UserName", SqlDbType.VarChar, 50, UserName);
        //用户密码
        Params[2] = mydb.MakeInParam("@UserPwd", SqlDbType.VarChar, 64, UserPwd); 
        int Count = -1;
        Count = mydb.RunProc("Proc_UsersAdd", Params);
        if (Count > 0)
            return true;
        else return false;
    }
    //更新用户
    //输入:
    //      XUserID - 用户编号;
    //输出:
    //      更新成功:返回True;
    //      更新失败:返回False;
    public bool UpdateByProc(string XUserID)
    {
        SqlParameter[] Params = new SqlParameter[2];
        DataBase mydb = new DataBase();
        Params[0] = mydb.MakeInParam("@UserID", SqlDbType.VarChar, 50, XUserID);               //用户编号           
        Params[1] = mydb.MakeInParam("@UserName", SqlDbType.VarChar, 50, UserName);
        int Count = -1;
        Count = mydb.RunProc("Proc_UsersModify", Params);
        if (Count > 0)
            return true;
        else return false;//用户姓名 
    }
    //删除用户
    //输入:
    //      XUserID - 用户编号;
    //输出:
    //      删除成功:返回True;
    //      删除失败:返回False;
    public bool DeleteByProc(string XUserID)
    {
        //定义参数类型
        SqlParameter[] Params = new SqlParameter[1];
        DataBase mydb = new DataBase();
        //用户编号
        Params[0] = mydb.MakeInParam("@UserID", SqlDbType.VarChar, 50, XUserID);                         
        int Count = -1;
        Count = mydb.RunProc("Proc_UsersDelete", Params);
        if (Count > 0)
            return true;
        else return false;
    }
    //查询用户
    //查询所用用户
    //不需要参数
    public DataSet QueryUsers()
    {
        DataBase mydb = new DataBase();
        return mydb.GetDataSet("Proc_UsersList");
    }

    //根据UserID判断该用户是否存在
    //输入:
    //      XUserID - 用户编号;        
    //输出:
    //      用户存在:返回True;
    //      用户不在:返回False;
    public bool CheckUser(string XUserID)
    {
        SqlParameter[] Params = new SqlParameter[1];
        DataBase DB = new DataBase();

        Params[0] = DB.MakeInParam("@UserID", SqlDbType.VarChar, 50, XUserID);                    

        SqlDataReader DR = DB.RunProcGetReader("Proc_UsersDetail", Params);
        if (!DR.Read())
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    #endregion 方法
}

Default.aspx

View Code
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>无标题页</title>
    <script type="text/javascript"></script>
    <style type="text/css">

        .style1
        {
            font-size: small;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
     <table border="0" cellpadding="0" cellspacing="0" height="100%" width="100%">
      
    <tr>
      <td style="height:4px;" colspan="2">
         </td>
    </tr>


          <tr>
              <td  style="width: 4px;  background: url(../Images/line.gif) repeat-y;"> 
            </td>   
            <td  valign="top" align="left" width="960px">
           
                          <h4>&gt;&gt;用户管理</h4>
                          
                                        
                       <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                              AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging" 
                              PageSize="8" OnRowCancelingEdit="GridView1_RowCancelingEdit"  OnRowDeleting="GridView1_RowDeleting" 
                              OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" 
                              DataKeyNames="UserID" Font-Size="13px" Width="58%" SkinID="gvSkin" 
                              CellPadding="4" ForeColor="#333333" GridLines="None">
                           <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                           <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
                    <Columns>    
                    <asp:TemplateField>
                           <ItemTemplate>
                              <asp:CheckBox ID="chkSelected" runat="server" Checked="False" Visible="True" /></ItemTemplate>
                         </asp:TemplateField>
                    <asp:TemplateField HeaderText="ID">
                            <ItemTemplate>
                                <%# Container.DataItemIndex+1 %>
                            </ItemTemplate>
                        </asp:TemplateField>                                        
                        <asp:TemplateField HeaderText="编号">                           
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Eval("ID") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="姓名">
                            <EditItemTemplate>
                                <asp:TextBox ID="tbxName" Width="70px" runat="server" Text='<%# Eval("userName") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label2" runat="server"><%# Eval("userName") %></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                         
                        <asp:CommandField ShowEditButton="True" HeaderText="编辑" />
                        <asp:CommandField ShowDeleteButton="True" HeaderText="删除" />
                    </Columns>
                           <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
                           <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
                           <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
                           <AlternatingRowStyle BackColor="White" />
                </asp:GridView>
                 <asp:Label ID="LabelPageInfo" runat="server" style="font-size: small"></asp:Label>
                <br /><asp:CheckBox ID="chkSelectAll" runat="server" AutoPostBack="true" Text="全选" 
                              Width="54px" OnCheckedChanged="chkSelectAll_CheckedChanged" 
                              style="font-size: small" />
                          &nbsp;<asp:ImageButton ID="ImageButtonDelete" runat="server" 
                              ImageUrl="~/Images/删除}.gif" OnClick="ImageButtonDelete_Click"></asp:ImageButton>
                                  
              
                          <br />
                                  
              
            </td>
        </tr>
       

          <tr>
              <td  style="width: 4px;  background: url(../Images/line.gif) repeat-y;"> 
                  &nbsp;</td>   
            <td  valign="top" align="left" width="960px">
           
          <table cellpadding="0" cellspacing="0" border="1"  
    bordercolor="#cccccc" style="border-collapse:collapse; width: 44%;" 
    frame="below">
              <tr>
                  <td bgcolor="#f6dda4" style="text-align:right;width:100%;" colspan="2">
                      <div class="title" align="left">
                          <h4>
                              添加用户</h4>
                      </div>
                  </td>
              </tr>
              <tr>
                  <td bgcolor="#f6dda4" style="text-align:right;">
                      <span class="style1">编号</span>:</td>
                  <td >
                      <div align="left">
                          <asp:TextBox id="txtUserID"  runat="server" MaxLength="20"></asp:TextBox>
                      </div>
                  </td>
              </tr>
              <tr>
                  <td bgcolor="#f6dda4" style="text-align:right;">
                      <span class="style1">姓名</span>:</td>
                  <td >
                      <div align="left">
                          <asp:TextBox id="txtUserName" runat="server" MaxLength="20"></asp:TextBox>
                      </div>
                  </td>
              </tr>
              <tr>
                  <td bgcolor="#f6dda4" style="text-align:right;">
                      <span class="style1">密码</span>:</td>
                  <td >
                      <div align="left">
                          <asp:TextBox id="txtUserPwd"  runat="server" MaxLength="20" TextMode="Password" 
                            Width="128px"></asp:TextBox>
                      </div>
                  </td>
              </tr>
              <tr>
                  <td>
                      &nbsp;</td>
                  <td valign="top" >
                      &nbsp;
                      <asp:ImageButton ID="imgBtnSave" runat="server" ImageUrl="~/Images/Save.GIF" 
                            OnClick="imgBtnSave_Click" />
                      &nbsp; &nbsp; 
                      <asp:ImageButton ID="imgBtnReturn" runat="server" CausesValidation="false" 
                          ImageUrl="~/Images/Return.GIF" οnclick="imgBtnReturn_Click" />
                      <asp:Label ID="lblMessage" runat="server" 
                            ForeColor=red></asp:Label>
                      &nbsp; &nbsp; &nbsp;
                  </td>
              </tr>
          </table>
                                  
              
            </td>
        </tr>
       
    </table>  

    </div>
    </form>
</body>
</html>

Default.aspx.cs

View Code
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            GridViewBind();
        }
    }
    public void GridViewBind()
    {
        //创建Users类对象user
        Users user = new Users();
        //使用使用Users类QueryUsers方法查询所有用户信息
        DataSet myds = user.QueryUsers();
        //为GridView控件指定数据源
        GridView1.DataSource = myds;
        //设置控件的主键字段值
        GridView1.DataKeyNames = new string[] { "ID" };
        //从数据库中绑定数据
        GridView1.DataBind();
        LabelPageInfo.Text = "你所在的位置:当前(第" + (GridView1.PageIndex + 1).ToString() + "页 共" + GridView1.PageCount.ToString() + "页)";
    }
    //GridView控件RowDeleting事件
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        //取出要删除记录的主键值
        string userID = GridView1.DataKeys[e.RowIndex].Values[0].ToString();
        //创建Users类的对象user
        Users user = new Users();
        //根据主键使用DeleteByProc方法删除用户
        if (user.DeleteByProc(userID))
        {
            Response.Write("<script>alert('删除成功!');location='Default.aspx'</script>");   
        }
        else
        {
            Response.Write("<script>alert('删除失败!');location='Default.aspx'</script>");
        }
        GridViewBind();//重新绑定数据
    }
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        //GridView编辑项索引等于单击行的索引
        GridView1.EditIndex = e.NewEditIndex;
        GridViewBind();
    }
    //GridView控件RowUpdating事件
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        //取出记录的主键值
        string userID = GridView1.DataKeys[e.RowIndex].Values[0].ToString();
        //创建Users类对象user
        Users user = new Users();
        user.UserName = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("tbxName")).Text;
        //使用Users类UpdateByProc方法修改用户信息,该方法中主要是调用Proc_UsersAdd存储过程
        if (user.UpdateByProc(userID))
        {
            //绑定数据库中数据
            GridViewBind();
            //修改成功给予提示
            Response.Write("<script>alert('修改成功!');location='Default.aspx'</script>");
        }
        else
        {
            Response.Write("<script>alert('修改失败!');location='Default.aspx'</script>");
        }
        //取消编辑状态
        GridView1.EditIndex = -1;
        //重新绑定下数据
        GridViewBind();
    }
    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        GridView1.EditIndex = -1;
        GridViewBind();
    }
    protected void ImageButtonDelete_Click(object sender, ImageClickEventArgs e)
    {
        for (int i = 0; i < this.GridView1.Rows.Count-1; i++)
        {
            bool isChecked = ((CheckBox)GridView1.Rows[i].FindControl("chkSelected")).Checked;
            if (isChecked)
            {
                string userID = ((Label)GridView1.Rows[i].FindControl("Label1")).Text;
                //创建Users类对象user
                Users user = new Users();
                //根据主键使用DeleteByProc方法删除用户
                if (user.DeleteByProc(userID))
                {
                    Response.Write("<script language=javascript>alert('删除成功!');location='Default.aspx'</script>");
                }
                else
                {
                    Response.Write("<script language=javascript>alert('" + userID + "删除失败!');location='Default.aspx'</script>");
                }
            }
        }
        GridViewBind();
    }
    protected void chkSelectAll_CheckedChanged(object sender, EventArgs e)
    {
        for (int i = 0; i < GridView1.Rows.Count; i++)
        {
            ((CheckBox)GridView1.Rows[i].FindControl("chkSelected")).Checked = this.chkSelectAll.Checked;
        }
    }
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        GridViewBind();
    }
    protected void imgBtnSave_Click(object sender, ImageClickEventArgs e)
    {
        if (Page.IsValid)
        {
            Users user = new Users();
            user.UserID = txtUserID.Text.Trim();
            if (!user.CheckUser(user.UserID))
            {
                user.UserName = txtUserName.Text;
                string PwdMD5 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(txtUserPwd.Text.Trim(), "MD5").ToString();
                user.UserPwd = PwdMD5;
                if (user.InsertByProc())
                {
                    lblMessage.Text = "成功插入该用户信息!";
                    Server.Transfer("Default.aspx");
                }
                else
                {
                    lblMessage.Text = "添加用户失败!";
                }
            }
            else
            {
                lblMessage.Text = "数据库中存在具有该编号的用户,请重新输入!";
            }
        }
    }
    protected void imgBtnReturn_Click(object sender, ImageClickEventArgs e)
    {
        Server.Transfer("Default.aspx");  
    }
}
   

 存储过程

View Code
CREATE PROCEDURE [dbo].[Proc_UsersAdd]
    (@UserID         [varchar](50), 
     @UserName         [varchar](50),
     @UserPwd         [varchar](64)
    )
AS INSERT INTO [db2].[dbo].[tb_user] 
     (ID, 
     [userName],
     [userPwd]) 
VALUES 
    ( @UserID,     
     @UserName,
     @UserPwd)


CREATE PROCEDURE [dbo].[Proc_UsersDelete]
    (@UserID        [varchar](50))
AS DELETE [db2].[dbo].[tb_user] 
WHERE 
    ( [ID]     = @UserID)


CREATE PROCEDURE [dbo].[Proc_UsersList]
AS SELECT      [db2].[dbo].[tb_user].[ID],         
         [db2].[dbo].[tb_user].[userName]                            
                        
FROM          [db2].[dbo].[tb_user]


ALTER PROCEDURE [dbo].[Proc_UsersModify]
    (@UserID         [varchar](50),     
     @UserName                  [varchar](50))        
AS UPDATE [db2].[dbo].[tb_user] 

SET          [userName]    = @UserName

         
WHERE 

    ( [ID]     = @UserID)

 

转载于:https://www.cnblogs.com/hsw-2013/archive/2013/03/19/2968422.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值