zoukankan      html  css  js  c++  java
  • 存储过程得到三个值

    用ASP.NET与SQL SERVER可是缘份最好了,稍大的程序一般第一先考虑的是SQL SERVER,只是一些很考虑经济的才使用ACCESS等了。用SQL SERVER,为了使数据库的效率更好,一般都会才取存储过程,因存储过程执行速度快,并且可以实现一些高级的查询等功能。比如传入一些数据参数,但执行的SQL过程可能不同等。
    下面就来个例子,建立一新的角色,要求角色的名字不能重复,以下是一存储过程。   
    CREATE PROCEDURE sp_AccountRole_Create
    

    @CategoryID int,
    @RoleName nvarchar(10),
    @Description nvarchar(50),
    @RoleID int output
    AS
    DECLARE @Count int

    -- 查找是否有相同名称的记录
    SELECT @Count = Count(RoleID) FROM Account_Role WHERE
    RoleName = @RoleName

    IF @Count = 0

    INSERT INTO Account_Role
    (CategoryID, RoleName, Description) valueS
    (@CategoryID, @RoleName, @Description)

    SET @RoleID = @@IDENTITY

    RETURN 1
    GO

      
      执行存储过程的C#过程:
    SqlConnection DbConnection = new SqlConnection(mConnectionString);
    SqlCommand command = new SqlCommand( "sp_AccountRole_Create", DbConnection );
    DbConnection.Open(connectString);
    // 废置SqlCommand的属性为存储过程
    command.CommandType = CommandType.StoredProcedure;

    command.Parameters.Add("@CategoryID", SqlDbType.Int, 4);
    command.Parameters.Add("@RoleName", SqlDbType.NVarChar, 10);
    command.Parameters.Add("@Description", SqlDbType.NVarChar, 50);
    command.Parameters.Add("@RoleID", SqlDbType.Int, 4);
    // 返回值
    command.Parameters.Add("Returnvalue",
    SqlDbType.Int,
    4, // Size
    ParameterDirection.Returnvalue,
    false, // is nullable
    0, // byte precision
    0, // byte scale
    string.Empty,
    DataRowVersion.Default,
    null );

    command.parameters["@CategoryID"].value = permission.CategoryID;
    command.parameters["@RoleName"].value = permission.PermissionName;
    command.parameters["@Description"].value = permission.Description;
    // 可以返回新的ID值
    command.parameters["@RoleID"].Direction = ParameterDirection.Output;

    int rowsAffected = command.ExecuteNonQuery();
    下面就来个例子,建立一新的角色,要求角色的名字不能重复,以下是一存储过程。   

    CREATE PROCEDURE sp_AccountRole_Create
    

    @CategoryID int,
    @RoleName nvarchar(10),
    @Description nvarchar(50),
    @RoleID int output
    AS
    DECLARE @Count int

    -- 查找是否有相同名称的记录
    SELECT @Count = Count(RoleID) FROM Account_Role WHERE
    RoleName = @RoleName

    IF @Count = 0

    INSERT INTO Account_Role
    (CategoryID, RoleName, Description) valueS
    (@CategoryID, @RoleName, @Description)

    SET @RoleID = @@IDENTITY

    RETURN 1
    GO


      
      执行存储过程的C#过程:

      

    SqlConnection DbConnection = new SqlConnection(mConnectionString);
    SqlCommand command = new SqlCommand( "sp_AccountRole_Create", DbConnection );
    DbConnection.Open(connectString);
    // 废置SqlCommand的属性为存储过程
    command.CommandType = CommandType.StoredProcedure;

    command.Parameters.Add("@CategoryID", SqlDbType.Int, 4);
    command.Parameters.Add("@RoleName", SqlDbType.NVarChar, 10);
    command.Parameters.Add("@Description", SqlDbType.NVarChar, 50);
    command.Parameters.Add("@RoleID", SqlDbType.Int, 4);
    // 返回值
    command.Parameters.Add("Returnvalue",
    SqlDbType.Int,
    4, // Size
    ParameterDirection.Returnvalue,
    false, // is nullable
    0, // byte precision
    0, // byte scale
    string.Empty,
    DataRowVersion.Default,
    null );

    command.parameters["@CategoryID"].value = permission.CategoryID;
    command.parameters["@RoleName"].value = permission.PermissionName;
    command.parameters["@Description"].value = permission.Description;
    // 可以返回新的ID值
    command.parameters["@RoleID"].Direction = ParameterDirection.Output;

    int rowsAffected = command.ExecuteNonQuery();
    int result = command.parameters["Returnvalue"].value;
    int newID = command.parameters["@RoleID"].value;

     功能挺强的吧,可以得到三个值,分别是行影响值,存储过程返回值,新的ID值。



  • 相关阅读:
    最大子数组求和并进行条件组合覆盖测试
    Ubuntu 16.04 c++ Google框架单元测试
    The directory '/home/stone/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If execu
    Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'
    个人博客作业三:微软小娜APP的案例分析
    补交 作业一
    补交 作业二:个人博客作业内容:需求分析
    嵌入式软件设计第12次实验报告
    嵌入式软件设计第11次实验报告
    嵌入式软件设计第10次实验报告
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/736733.html
Copyright © 2011-2022 走看看