从数据访问对象中的存储过程中返回两个 select 语句的值

Posted

技术标签:

【中文标题】从数据访问对象中的存储过程中返回两个 select 语句的值【英文标题】:Return the values from two select statement from stored procedure in Data access object 【发布时间】:2014-02-13 13:51:33 【问题描述】:

下面定义的是有两个插入语句的存储过程。

 USE [RHK_HIS]
 GO
 /****** Object:  StoredProcedure [dbo].[createuser]    Script Date: 01/23/2014      11:50:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO




 ALTER PROCEDURE [dbo].[createuser]
-- Add the parameters for the stored procedure here
  ( @User_Id varchar(15),
  @Password varchar(15),
  @Name varchar(30),
  @Role_Id varchar(10),
  @Department_Id varchar(10),
   @Active varchar(1)
  )
 AS
 BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
insert into User_M (User_Id,Password,Name,Role_Id,Department_Id,Active) values   (@User_Id,@Password,@Name,@Role_Id,@Department_Id,@Active)
insert into User_Dept_Map(User_Id,Dept_Id) values (@User_Id,@Department_Id)
 END

存储过程在 Connection.cs 中被下面指定的函数调用

    public int create_user(UserMaster ua)

    SqlConnection Con = new SqlConnection(str);
    Con.Open();
    SqlCommand Cmd = new SqlCommand("createuser", Con);
    Cmd.CommandType = CommandType.StoredProcedure;
    try
    
        log.Debug("Inside Create user");
        Cmd.Parameters.AddWithValue("@User_Id", ua.UserName);
        Cmd.Parameters.AddWithValue("@Password", ua.Password);
        Cmd.Parameters.AddWithValue("@Name", ua.Name);
        Cmd.Parameters.AddWithValue("@Role_Id", ua.Role);
        Cmd.Parameters.AddWithValue("@Department_Id", ua.Department);
        Cmd.Parameters.AddWithValue("@Active", ua.Active);
        log.Debug("Inside Create_User: New User created having ID: " + ua.UserName);
        log.Info("user created");
        return Cmd.ExecuteNonQuery();
    
    catch (Exception e)
    
        log.Debug("Error: Inside catch block of Create User");
        log.Error("Error msg:" + e);
        log.Error("Stack trace:" + e.StackTrace);

        throw e;
    
    finally
    
        Cmd.Dispose();
        Con.Close();
        Con.Dispose();
    


 

这段代码工作正常,会将值插入两个不同的表,现在我的问题是如果I have two select statement of two different table in one stored procedure how to return the values in the function?? 我应该使用object 来返回吗?如果是这样如何创建object.?任何帮助表示赞赏

【问题讨论】:

你的意思是说你想从 bot hselect 语句中获取值? 是的。我想要两个 select 语句中的值。 【参考方案1】:

您可以在Dataset 中组合DataTable 的形式获得两个select 语句结果集。

下面的代码 sn-p 是使用 SqlDataAdapterDataSet 完成的,在适用的地方更改值

C#代码

System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection("<SQL Server Connection string>");
System.Data.SqlClient.SqlDataAdapter adptr = new System.Data.SqlClient.SqlDataAdapter("exec <Stored Proc name>", conn);
System.Data.DataSet dataset = new System.Data.DataSet();
adptr.Fill(dataset);

System.Data.DataTable table = new System.Data.DataTable();
table = dataset.Tables[0];
//do something for table-1

table = dataset.Tables[1];
//do something for table-2

【讨论】:

以上是关于从数据访问对象中的存储过程中返回两个 select 语句的值的主要内容,如果未能解决你的问题,请参考以下文章

如何从 adodb 记录集中访问存储过程中的变量?

如何获取存储过程以输出从 SQL*Plus 中的 select 语句返回的表?

从 MS SQL 中的 PHP PDO 存储过程中返回 Select *

VB.NET是如何使用ADO让存储过程返回数据表中的值呢?求解!

如何从 Oracle 存储过程中获取两个返回值

访问数据视图中的第二个表