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程序设计有所帮助。