存储过程心得

  最近接触了个采用存储过程的系统开发,感觉存储过程真的很好啊 哈哈,以前看了很长一段时间这方面的书,感觉真他妈的复杂,现在直接边看边自己亲手写,感觉效果好多了,更加的直观,深刻。

StoredProcedure 是在System.Data 下面
一:建立 SqlConnection 连接 ReturnCon

  public static SqlConnection ReturnCon()
  {
   string strCon=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
   SqlConnection con=new SqlConnection(strCon);
   if(con.State.Equals(ConnectionState.Closed))
   {
    con.Open();
   }
   return con;
  }

二:实现 cmd的方法(有多个重载)
  public static SqlCommand Creatcmd(string procname,System.Data.SqlClient.SqlParameter[] prams,SqlConnection con)
  {
   SqlConnection Sqlcon=con;
   if(Sqlcon.State.Equals(ConnectionState.Closed))
   {
    Sqlcon.Open();
   }
   SqlCommand cmd=new SqlCommand();
   cmd.Connection=Sqlcon;
   cmd.CommandText=procname;
   cmd.CommandType=CommandType.StoredProcedure; //采用存储过程
   if(prams!=null)
   {
    foreach(System.Data.SqlClient.SqlParameter paramenter in prams)
    {
     if(paramenter!=null)
     {
      cmd.Parameters.Add(paramenter);
     }     
    }
   }
   return cmd;   
  }

三(1):实现SqlDataReader的多个重载方法引用上面的cmd(根据参数个数一一对应)
public static SqlDataReader RunProGetReader(string procname,System.Data.SqlClient.SqlParameter[] prams,SqlConnection con)
  {
   SqlCommand cmd=Creatcmd(procname,prams,con);
   SqlDataReader sdr=cmd.ExecuteReader(CommandBehavior.CloseConnection);
   return sdr;
  }

三(2)实现SqlDataAdapter的方法,返回DataTable类型引用上面的cmd
  public static DataTable RunProcGetTable(string procname,System.Data.SqlClient.SqlParameter[] prams,SqlConnection con)
  {
   SqlCommand cmd=Creatcmd(procname,prams,con);
   SqlDataAdapter sda=new SqlDataAdapter();
   DataSet ds=new DataSet();
   sda.SelectCommand=cmd;
   sda.Fill(ds);
   DataTable dt=ds.Tables[0];
   con.Close();
   return dt;
  }

四(1)实现cmd的返回方法ExecuteNonQuery的多个重载引用上面的cmd(根据参数个数一一对应)
  public static int RunExecute(string procname,System.Data.SqlClient.SqlParameter[] prams)
  {
   SqlConnection con=ReturnCon();
   SqlCommand cmd=Creatcmd(procname,prams,con);
   int intResult=Convert.ToInt32(cmd.ExecuteNonQuery());
   con.Close();
   return intResult;
  }

四(2)实现cmd的返回方法ExecuteScalar的多个重载引用上面的cmd(根据参数个数一一对应)
  public static int RunExecuteScalar(string procname,System.Data.SqlClient.SqlParameter[] prams)
  {
   SqlConnection con=ReturnCon();
   SqlCommand cmd=Creatcmd(procname,prams,con);
   int intResult=Convert.ToInt32(cmd.ExecuteScalar());
   con.Close();
   return intResult;
  }

====================================================================================

功能实现类举例--------用户类:

public class User
 {
  private int _userid;
  private string _username;
  public string _userpwd;
  
  public int UserId   //公共属性,只读
  {
   get{return this._userid;}
  }
  
  
  public string UserName   //公共属性,只读
  {
   get {return this._username;}
   set{this._username=value;}
  }
  
  
  public string UserPwd
  {
   get{return this._userpwd;}
   set{this._userpwd=value;}
  }

  public User()
  {  
  }

  public User(string UserName,string UserPwd)
  {
   this._username=UserName;
   this._userpwd=UserPwd;
  }
  
  public User(SqlDataReader sdr)
  {
   this._userid=Convert.ToInt32(sdr["UserId"]);
   this._username=sdr["UserName"].ToString();
   this._userpwd=sdr["UserPwd"].ToString();
  }

  public static bool AddUser(User singleUser)
  {
   bool Flag = false;
   string procname="AddUser";
   System.Data.SqlClient.SqlParameter[] prams={
               new SqlParameter("@UserName",System.Data.SqlDbType.VarChar,50),
               new SqlParameter("@UserPwd",System.Data.SqlDbType.VarChar,50)
                };
   prams[0].Value=singleUser._username;
   prams[1].Value=singleUser._userpwd;
   int intResult=DataBase.RunExecute(procname,prams);
   if(intResult>0)
   {
    Flag = true;
   }
   return Flag;
  }

  public static bool DeleteUser(int UserId)
  {
   bool Flag = false;
   string procname="DeleteUser";
   System.Data.SqlClient.SqlParameter[] prams={new SqlParameter("@UserId",System.Data.SqlDbType.Int)};
   prams[0].Value=UserId;
   int intResult=DataBase.RunExecute(procname,prams);
   if(intResult>0)
   {
    Flag = true;
   }
   return Flag;   
  }

  public static bool UpdateUser(User singleUser)
  {
   bool Flag = false;
   string procname="UpdateUser";
   SqlParameter[] prams={new SqlParameter("@UserId",System.Data.SqlDbType.Int),
          new SqlParameter("@UserName",System.Data.SqlDbType.VarChar,50),
          new SqlParameter("@UserPwd",System.Data.SqlDbType.VarChar,50)
         };
   prams[0].Value=singleUser._userid;
   int intResult=DataBase.RunExecute(procname,prams);
   if(intResult>0)
   {
    Flag = true;
   }
   return Flag;   
  }


  public static bool ChangePwd(int UserId,string UserPwd)
  {
   bool Flag = false;
   string procname="ChangePwd";
   SqlParameter[] prams={new SqlParameter("@UserId",System.Data.SqlDbType.Int),
          new SqlParameter("@UserPwd",System.Data.SqlDbType.VarChar,50)
         };
   prams[0].Value=UserId;
   int intResult=DataBase.RunExecute(procname,prams);
   if(intResult>0)
   {
    Flag = true;
   }
   return Flag;
  }

  public static User GetUserByUserId(int UserId)
  {
   User singleUser = null;
   string procname = "GetUserByUserId";
   SqlParameter[] prams={new SqlParameter("procname",System.Data.SqlDbType.Int)};
   prams[0].Value=UserId;
   SqlDataReader sdr = DataBase.RunProGetReader(procname,prams);
   while(sdr.Read())
   {
    singleUser = new User(sdr);
   }
   sdr.Close();
   return singleUser;
 }

功能实现类举例--------新闻类
功能实现类举例--------模块类
.....
.....
.....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值