zoukankan      html  css  js  c++  java
  • 存储过程返回多个结果集,它在程序中这样做...

    前言

    面对存储过程返回多个结果集,我们在.NET应用程序中如何处理呢?

    存储过程

    脚本如下:

    CREATE PROCEDURE PROCEDURENAME
    AS
    BEGIN
      BEGIN
        IF OBJECT_ID('TABLE1') IS NOT NULL 
    	DROP TABLE TABLE1
        CREATE TABLE TABLE1 (ID INT PRIMARY KEY IDENTITY(1,1),[NAME] VARCHAR(50),AGE INT)
        INSERT INTO  TABLE1 ([NAME],AGE) VALUES('大卫1',50) 
        INSERT INTO  TABLE1 ([NAME],AGE) VALUES('约翰1',35) 
        
        IF OBJECT_ID('TABLE2') IS NOT NULL 
    	DROP TABLE TABLE2
        CREATE TABLE TABLE2 (ID INT PRIMARY KEY IDENTITY(1,1),[NAME] VARCHAR(50),AGE INT)
        INSERT INTO  TABLE2 ([NAME],AGE) VALUES('大卫2',50) 
        INSERT INTO  TABLE2 ([NAME],AGE) VALUES('约翰2',35) 
        
        IF OBJECT_ID('TABLE3') IS NOT NULL 
    	DROP TABLE TABLE3
        CREATE TABLE TABLE3 (ID INT PRIMARY KEY IDENTITY(1,1),[NAME] VARCHAR(50),AGE INT)
        INSERT INTO  TABLE3 ([NAME],AGE) VALUES('大卫3',50) 
        INSERT INTO  TABLE3 ([NAME],AGE) VALUES('约翰3',35) 
    
        IF OBJECT_ID('TABLE4') IS NOT NULL 
    	DROP TABLE TABLE4
        CREATE TABLE TABLE4 (ID INT PRIMARY KEY IDENTITY(1,1),[NAME] VARCHAR(50),AGE INT)
        INSERT INTO  TABLE4 ([NAME],AGE) VALUES('大卫4',50) 
        INSERT INTO  TABLE4 ([NAME],AGE) VALUES('约翰4',35) 
      END
      
      BEGIN
        SELECT * FROM TABLE1 //数据集1
        SELECT * FROM TABLE2 //数据集2
        SELECT * FROM TABLE3 //数据集3
        SELECT * FROM TABLE4 //数据集4
      END
    
    END
    
    

    程序中调用存储过程

    代码如下:

    public DataSet GetProcedureName(out string out outVal)
    {
        using(var db = new Entities())
        {
            var command=db.Database.Connection.CreateCommand(); //创建command的链接
            command.CommandType = CommandType.StoredProcedure;  //指向CommandType 为存储过程类型
            command.CommandText = "PROCEDURENAME";              //存储过程名称
            command.Parameters.AddRange(new SqlParameter[]{
                new SqlParameter("paraKey1",paraVal1),//输入参数
                new SqlParameter("paraKey2",paraVal2) //输出参数
                {
                    Direction = ParameterDirection.Output, //指向该参数是输出参数
                    SqlDbType = SqlDbType.VarChar,         //输出参数的类型
                    Size = 200                             //输出参数的大小
                },
            });
            using(var adapter=new SqlDataAdapter(command as SqlCommand))
            {
                DataSet dataSet = new DataSet();//声明数据集
                adapter.Fill(dataSet);          //添加数据集
                outVal = command.Parameters[1].Value.ToString();
                return dataSet;                 //返回数据集
            }
        }
    }
    

    .NET WEBAPI 中调用

    代码如下:

    public HttpResponseMessage GetProcedureName()
    {
        DataSet result = new DataSet(); //声明数据集
        result = GetProcedureName();    //调用方法
        return Json(new APIResultModel()
        {
            result = new
            {
               data1 = result.Tables[0],
               data2 = result.Tables[1],
               data3 = result.Tables[2],
               data4 = result.Tables[3],
            }
        });
    }
    

    总结

    使用此方法,可以完全避免EF对存储过程的更新。我们只需要专注于存储过程即可。

  • 相关阅读:
    【STM32 .NET MF开发板学习29】摄像头蓝牙图像远程获取
    【.Net MF网络开发板研究04】Socket编程之服务端
    【.Net MF网络开发板研究01】IP地址设定及简单web演示
    【.Net MF网络开发板研究02】Http Server功能演示
    用VB.net开发.NET Micro Framework
    【.Net MF网络开发板研究03】获取雅虎天气(HttpClient示例)
    js中URL编码参数(UrlEncode,UrlDecode)[ansi编码] PHP好使 简单
    PHP通过SMTP实现发送邮件_包括附件 简单
    mysql case then使用 简单
    PHP中$_SERVER的详细参数与说明 简单
  • 原文地址:https://www.cnblogs.com/ZengJiaLin/p/15160755.html
Copyright © 2011-2022 走看看