asp.net实现调用存储过程并带返回值的方法
本文实例讲述了asp.net实现调用存储过程并带返回值的方法。分享给大家供大家参考,具体如下:
///<summary> ///DataBase的摘要说明 ///</summary> publicclassDataBase { ///<summary> ///DataBase的摘要说明 ///</summary> protectedstaticSqlConnectionBaseSqlConnection=newSqlConnection();//连接对象 protectedSqlCommandBaseSqlCommand=newSqlCommand();//命令对象 publicDataBase() { // //TODO:在此处添加构造函数逻辑 // } protectedvoidOpenConnection() { if(BaseSqlConnection.State==ConnectionState.Closed)//连接是否关闭 try { BaseSqlConnection.ConnectionString=ConfigurationManager.ConnectionStrings["productsunion"].ToString(); BaseSqlCommand.Connection=BaseSqlConnection; BaseSqlConnection.Open(); } catch(Exceptionex) { thrownewException(ex.Message); } } publicvoidCloseConnection() { if(BaseSqlConnection.State==ConnectionState.Open) { BaseSqlConnection.Close(); BaseSqlConnection.Dispose(); BaseSqlCommand.Dispose(); } } publicboolProc_Return_Int(stringproc_name,paramsSqlParameter[]cmdParms) { try { OpenConnection(); if(cmdParms!=null) { foreach(SqlParameterparameterincmdParms) { if((parameter.Direction==ParameterDirection.InputOutput||parameter.Direction==ParameterDirection.Input)&& (parameter.Value==null)) { parameter.Value=DBNull.Value; } BaseSqlCommand.Parameters.Add(parameter); } BaseSqlCommand.CommandType=CommandType.StoredProcedure; BaseSqlCommand.CommandText=proc_name; BaseSqlCommand.ExecuteNonQuery(); if(BaseSqlCommand.Parameters["Return"].Value.ToString()=="0") { returntrue; } else { returnfalse; } } else { returnfalse; } } catch { returnfalse; } finally { BaseSqlCommand.Parameters.Clear(); CloseConnection(); } } }
加入了一个组合类
publicclassSqlModel:ISqlModel { #regionISqlModel成员 publicboolProc_Return_Int(stringproc_name,string[,]sArray) { try { if(sArray.GetLength(0)>=1) { DataBasedb=newDataBase(); SqlParameter[]sqlpar=newSqlParameter[sArray.GetLength(0)+1];//加入返回值 for(inti=0;i<sArray.GetLength(0);i++) { sqlpar[i]=newSqlParameter(sArray[i,0],sArray[i,1]); } sqlpar[sArray.GetLength(0)]=newSqlParameter("Return",SqlDbType.Int); sqlpar[sArray.GetLength(0)].Direction=ParameterDirection.ReturnValue; if(db.Proc_Return_Int(proc_name,sqlpar)) { returntrue; } else { returnfalse; } } else { returnfalse; } } catch { returnfalse; } } #endregion }
前台调用
string[,]sArray=newstring[3,2]; sArray[0,0]="@parent_id"; sArray[1,0]="@cn_name"; sArray[2,0]="@en_name"; sArray[0,1]="5"; sArray[1,1]="aaaab"; sArray[2,1]="cccccc"; Factory.SqlModelsm=newFactory.SqlModel(); sm.Proc_Return_Int("Product_Category_Insert",sArray);
存储过程内容
ALTERPROCEDURE[dbo].[Product_Category_Insert] @parent_idint, @cn_Namenvarchar(50), @en_Namenvarchar(50) AS BEGIN SETNOCOUNTON; DECLARE@ERRint SET@ERR=0 BEGINTRAN IF@parent_id<0ORISNULL(@cn_Name,'')='' BEGIN SET@ERR=1 GOTOtheEnd END IF(NOTEXISTS(SELECTIdFROMProduct_CategoryWHEREId=@parent_id)) BEGIN SET@ERR=2 GOTOtheEnd END DECLARE@Idint,@Depthint,@orderingint SELECT@Id=ISNULL(MAX(Id)+1,1)FROMProduct_Category--计算@Id IF@Parent_Id=0 BEGIN SET@Depth=1--计算@Depth SELECT@Ordering=ISNULL(MAX(Ordering)+1,1)FROMProduct_Category--计算@OrderId END ELSE BEGIN SELECT@Depth=Depth+1FROMProduct_CategoryWHEREId=@Parent_Id--计算@Depth,计算@Ordering时需要用到 SELECT@Ordering=MAX(Ordering)+1FROMProduct_Category--计算@Ordering WHEREId=@Parent_Id UPDATEProduct_CategorySETOrdering=Ordering+1WHEREOrdering>=@Ordering--向后移动插入位置后面的所有节点 END INSERTINTOProduct_Category(Id,Parent_Id,cn_Name,en_name,Depth,Ordering)VALUES(@Id,@Parent_Id,@cn_Name,@en_name,@Depth,@Ordering) IF@@ERROR<>0 SET@ERR=-1 theEnd: IF@ERR=0 BEGIN COMMITTRAN RETURN0 END ELSE BEGIN ROLLBACKTRAN RETURN@ERR END END
希望本文所述对大家asp.net程序设计有所帮助。