asp.net实现调用存储过程并带返回值的方法

本文实例讲述了asp.net实现调用存储过程并带返回值的方法。分享给大家供大家参考,具体如下:

/// <summary>
/// DataBase 的摘要说明
/// </summary>
public class DataBase
{
    /// <summary>
    ///DataBase 的摘要说明
    /// </summary>
    protected static SqlConnection BaseSqlConnection = new SqlConnection();//连接对象
    protected SqlCommand BaseSqlCommand = new SqlCommand(); //命令对象
    public DataBase()
    {
      //
      // TODO: 在此处添加构造函数逻辑
      //
    }
    protected void OpenConnection()
    {
      if (BaseSqlConnection.State == ConnectionState.Closed) //连接是否关闭
        try
        {
          BaseSqlConnection.ConnectionString = ConfigurationManager.ConnectionStrings["productsunion"].ToString();
          BaseSqlCommand.Connection = BaseSqlConnection;
          BaseSqlConnection.Open();
        }
        catch (Exception ex)
        {
          throw new Exception(ex.Message);
        }
    }
    public void CloseConnection()
    {
      if (BaseSqlConnection.State == ConnectionState.Open)
      {
        BaseSqlConnection.Close();
        BaseSqlConnection.Dispose();
        BaseSqlCommand.Dispose();
      }
    }
    public bool Proc_Return_Int(string proc_name, params SqlParameter[] cmdParms)
    {
      try
      {
        OpenConnection();
        if (cmdParms != null)
        {
          foreach (SqlParameter parameter in cmdParms)
          {
            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")
          {
            return true;
          }
          else
          {
            return false;
          }
        }
        else
        {
          return false;
        }
      }
      catch
      {
        return false;
      }
      finally
      {
        BaseSqlCommand.Parameters.Clear();
        CloseConnection();
      }
    }
}

加入了一个组合类

public class SqlModel:ISqlModel
{
  #region ISqlModel 成员
  public bool Proc_Return_Int(string proc_name, string[,] sArray)
  {
    try
    {
      if (sArray.GetLength(0) >= 1)
      {
        DataBase db = new DataBase();
        SqlParameter[] sqlpar = new SqlParameter[sArray.GetLength(0)+1];//加入返回值
        for (int i = 0; i < sArray.GetLength(0); i++)
        {
          sqlpar[i] = new SqlParameter(sArray[i,0], sArray[i,1]);
        }
        sqlpar[sArray.GetLength(0)] = new SqlParameter("Return", SqlDbType.Int);
        sqlpar[sArray.GetLength(0)].Direction = ParameterDirection.ReturnValue;
        if (db.Proc_Return_Int(proc_name, sqlpar))
        {
          return true;
        }
        else
        {
          return false;
        }
      }
      else
      {
        return false;
      }
    }
    catch
    {
      return false;
    }
  }
  #endregion
}

前台调用

string[,] sArray = new string[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.SqlModel sm = new Factory.SqlModel();
sm.Proc_Return_Int("Product_Category_Insert", sArray);

存储过程内容

ALTER PROCEDURE [dbo].[Product_Category_Insert]
  @parent_id int,
  @cn_Name nvarchar(50),
  @en_Name nvarchar(50)
AS
BEGIN
  SET NOCOUNT ON;
  DECLARE @ERR int
  SET @ERR=0
  BEGIN TRAN
  IF @parent_id<0 OR ISNULL(@cn_Name,'')=''
    BEGIN
      SET @ERR=1
      GOTO theEnd
    END
  IF(NOT EXISTS(SELECT Id FROM Product_Category WHERE Id=@parent_id))
    BEGIN
      SET @ERR=2
      GOTO theEnd
    END
  DECLARE @Id int,@Depth int,@ordering int
  SELECT @Id=ISNULL(MAX(Id)+1,1) FROM Product_Category--计算@Id
  IF @Parent_Id=0
    BEGIN
      SET @Depth=1--计算@Depth
      SELECT @Ordering=ISNULL(MAX(Ordering)+1,1) FROM Product_Category--计算@OrderId
    END
  ELSE
    BEGIN
      SELECT @Depth=Depth+1 FROM Product_Category WHERE Id=@Parent_Id--计算@Depth,计算@Ordering时需要用到
      SELECT @Ordering=MAX(Ordering)+1 FROM Product_Category--计算@Ordering
        WHERE Id=@Parent_Id
      UPDATE Product_Category SET Ordering=Ordering+1 WHERE Ordering>=@Ordering--向后移动插入位置后面的所有节点
    END
  INSERT INTO Product_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
    COMMIT TRAN
    RETURN 0
    END
  ELSE
    BEGIN
    ROLLBACK TRAN
    RETURN @ERR
    END
END

希望本文所述对大家asp.net程序设计有所帮助。

(0)

相关推荐

  • asp.net sql存储过程

    Visual Studio.Net为SQL的存储过程提供了强大的支持,您既可以通过visual studio.net来新建存储过程,也可以直接在Sql Server的查询分析器中运行,还可以通过企业管理器创建,使用起来也非常方便.大家一直都误认为SQL存储过程是一个比较"高深"的技术,其实掌握一般的语法是没有什么大问题的,而我们在使用存储教程中也主要是增删减的操作,学会使用一般的T-SQL就很容易上手了. 我们先来看一下在Sql-server中是如何创建一个存储过程的吧,我们可以使用S

  • asp.net利用存储过程实现模糊查询示例分享

    复制代码 代码如下: USE [TestDB]GO /****** Object:  Table [dbo].[tblCustomer]    Script Date: 01/18/2014 22:01:53 ******/SET ANSI_NULLS ONGO SET QUOTED_IDENTIFIER ONGO CREATE TABLE [dbo].[tblCustomer]( [id] [int] IDENTITY(1,1) NOT NULL, [name] [nvarchar](100)

  • asp.net实现调用带有输出参数的存储过程实例

    本文实例讲述了asp.net实现调用带有输出参数的存储过程.分享给大家供大家参考,具体如下: 前台jqurey <script type="text/javascript"> $(document).ready(function(){ $('#change_image').click(function(){ $('#imgAuthenCode').attr('src','CheckCode.aspx?'+Math.random());}); $("#account

  • asp.net中oracle 存储过程(图文)

    在大型数据库系统中,存储过程和触发器具有很重要的作用.无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合. ORACLE代码 CREATE OR REPLACE PROCEDURE gd_CURSOR(MYCS1 OUT SYS_REFCURSOR,MYCS2 OUT SYS_REFCURSOR,a out varchar)as BEGIN a:='test'; OPEN MYCS1 FOR SELECT 1 from dual; OPEN MYCS2 FOR SELECT 2 fr

  • 在ASP.NET中用存储过程执行SQL语句

    存储过程执行效率比单独的SQL语句效率高. 样编写存储过程?存储过程在SQL Server 2005对应数据库的可编程性目录下. 比如,创建一个存储过程 复制代码 代码如下: create procedure procNewsSelectNewNews as begin select top 10 n.id,n.title,n.createTime,c.name from news n inner join category c on n.caId=c.id order by n.createT

  • asp.net 存储过程调用

    1.调用存储过程,但无返回值 复制代码 代码如下: Private Function SqlProc1(ByVal ProcName As String) As Boolean '定义数据链接部分省略, myConn为链接对象 ProcName为存储过程名 Dim myCommand As New SqlClient.SqlCommand(ProcName, myConn) With myCommand .CommandType = CommandType.StoredProcedure .Pa

  • ASP.NET 获取存储过程返回值的实现代码

    1.首先我们要建立一张表(UserInfo). 主要字段Id.uname.upass. 2.创建带返回值的存储过程 复制代码 代码如下: create proc proc_addUserInfo @uname varchar(50), @upass varchar(50), @Returnc int output as begin insert into erp_user(u_name,u_pass)values(@uname,@upass) set @Returnc= isnull(@@ide

  • 在ASP.NET中调用存储过程方法新解

    在使用.NET的过程中,数据库访问是一个很重要的部分,特别是在B/S系统的构建过程中,数据库操作几乎成为了一个必不可少的操作.调用存储过程实现数据库操作使很多程序员使用的方法,而且大多数的程序员都是能使用存储过程就使用存储过程,很少直接使用SQL语句,所以存储过程是很有用而且很重要的. 存储过程简介 简单的说,存储过程是由一些SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,也可以从另一个过程或触发器调用.它的参数可以被传递和返回.与应用程序中的函数过程类似,

  • asp.net中调用oracle存储过程的方法

    存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它. 存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程. 不多说了,本文通过两种方法介绍asp.net中调用oracle存储过程的方法,具体内容请看下面代码. 调用oracle存储过程方法一: ORACLE代码 CREATE OR REP

  • asp.net中如何调用sql存储过程实现分页

    首先看下面的代码创建存储过程 1.创建存储过程,语句如下: CREATE PROC P_viewPage @TableName VARCHAR(200), --表名 @FieldList VARCHAR(2000), --显示列名,如果是全部字段则为* @PrimaryKey VARCHAR(100), --单一主键或唯一值键 @Where VARCHAR(2000), --查询条件 不含'where'字符,如id>10 and len(userid)>9 @Order VARCHAR(100

  • asp.net中IDataParameter调用存储过程的实现方法

    本文实例讲述了asp.net中IDataParameter调用存储过程的实现方法,是asp.net数据库程序设计中非常实用的技巧.分享给大家供大家参考. 具体实现方法如下: public string GenerateExamePaper(string paperType, string driverID, string MacAddr) { int i; IDataParameter[] iData = new SqlParameter[4]; iData[0] = new SqlParame

随机推荐