C# 通过DataSet 获取SQL 存储过程返回的多个结果集(tables)

测试数据:Northwind

链接地址: https://files.cnblogs.com/files/louiszh/NorthWind.zip

首先创建一个测试存储过程:

IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE id = object_id (‘pr_test‘))
   DROP PROCEDURE pr_test
go

CREATE PROCEDURE pr_test
AS
SELECT TOP 4 * FROM Customers

SELECT TOP 4  * FROM Employees
GO

EXEC pr_test

返回两个结果集:

在C#代码中通过DataSet集合获取存储过程结果集:

using System;
using System.Data;
using System.Data.SqlClient;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string connStr = "Data Source=.;Initial Catalog=Northwind;User ID=sa;Password=root";
            SqlConnection conn = null;
            conn = new SqlConnection(connStr);
            conn.Open();
            string sql = "exec pr_test";
            SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
            DataSet ds = new DataSet();
            sda.Fill(ds);
            DataTable dt_customer = ds.Tables[0];
            DataTable dt_employee = ds.Tables[1];
            Console.WriteLine(dt_customer.Rows.Count);

        }
    }
}

查看 DataSet是包含两个Table的:

         

原文地址:https://www.cnblogs.com/louiszh/p/12587652.html

时间: 2024-08-27 21:48:26

C# 通过DataSet 获取SQL 存储过程返回的多个结果集(tables)的相关文章

SQL 存储过程返回值

1.  存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)  用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况  (1)假如通过查询分析器执行该存储过程,在显示栏中假如有影响的行数,则影响几行count就是几  (2)假如通过查询分析器执行该存储过程,在显示栏中假如显示'命令已成功完成.'则count = -1;在显示栏中假如有查询结果,则count = -1 总结:A.ExecuteNonQuery()该方法只返回影响的

sql 存储过程返回多个值

ALTER PROCEDURE your_sp_name    ASBEGIN    DECLARE @a INT, @b INT, @c INT    SELECT @a= COUNT(1) FROM table_name WHERE 条件1    SELECT @b= COUNT(1) FROM table_name WHERE 条件2    SELECT @c= COUNT(1) FROM table_name WHERE 条件3        SELECT @a AS a, @b AS

SQL存储过程中,传参获取指定条数的记录

假设传入参数 为 @TopCount 直接写 Select top @topcount * from table 是不行的. 可以考虑使用SET ROWCOUNT 示例如下 ALTER PROCEDURE [dbo].[P_CSM_SelectHandleResult] @TopCount int=50 AS BEGIN SET NOCOUNT ON; set rowcount @TopCount SELECT * from HandleResult order by HandleIndex d

C#获取存储过程返回值和输出参数值的方法

//转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @b //GO SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString()); conn.Open(); SqlCommand MyCom

获取存储过程返回值及代码中获取返回值

获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert](@o_buyerid int ,@o_id bigint OUTPUT)ASBEGINSET NOCOUNT ON;BEGININSERT INTO [Order](o_buyerid )VALUES (@o_buyerid )SET @o_id = @@IDENTITYENDEND 存储过程中获得方法: D

finereport报表,使用带参数的sql存储过程,报没有返回数据集的错

原因:在SqlServer数据库中,若定义的存储过程中包含有insert/update等更新操作时,在设计器中对存储过程进行调用时,会提示没有返回数据集的错误. 解决方法:修改存储过程,在begin 后面添加 SET NOCOUNT ON. 不管多复杂的sql存储过程 只需要在第一个大的begin后面添加 如下: ALTER proc [dbo].[proc_enterylist] @qybm varchar(50),@strWhere varchar(2000)='',@stratrow in

获取动态SQL的返回结果

1. 介绍说明 有时候在执行存储过程后,需要获取存储过程返回的列表,然后进行相应操作的情况,或者执行动态语句,获取返回结果的情况,通过EXEC ,sp_executesql可以实现该功能. 网上也有很多相关的读取方式,这里做个总结,方便以后查阅使用 2. 建表测试脚本 IF OBJECT_ID('tbScore') IS NOT NULL DROP TABLE tbScore GO CREATE TABLE tbScore ( 姓名 VARCHAR(10) , 课程 VARCHAR(10) ,

用SQL语句获得一个存储过程返回的表

定义一个存储过程如下: create proc [dbo].[test1] @id int as select 1 as id,'abc' as name union all select @id as id,'zzz' as name 返回两行数据.现在想用SQL语句来调用这个存储过程,并把他返回的表放入变量中.可以如下做: declare @table table(id int,name varchar(50))--定义表变量来存放存储过程返回的内容 insert into @table e

获取存储过程返回值的几种方式

1 正常存储过程带RETURN(只能返回整型) CREATE PROCEDURE p_test1 AS DECLARE @int int SET @int = 102400; RETURN @int;--这里只能返回整型 --执行 DECLARE @p1return INT --声明一个变量 EXECUTE @p1return= p_test1 --使用变量来接收 return回来的值 SELECT @p1return 2 带OUTPUT参数的存储过程 CREATE PROCEDURE p_2