C# 如何获取存储过程返回的两个表

C# 如何获取存储过程返回的两个表,c#,sql-server,stored-procedures,linq-to-sql,C#,Sql Server,Stored Procedures,Linq To Sql,我的方法: [FunctionName=get_值] [结果类型值类型\结果] public IMultipleResults getvaluesresult[ParameterDbType=Int]System.Nullable Id1[ParameterDbType=VarChar100]string Id2 { IExecuteResult=this.ExecuteMethodCallthis,MethodInfoMethodInfo.GetCurrentMethod,Id1,Id2; 返

我的方法:

[FunctionName=get_值] [结果类型值类型\结果] public IMultipleResults getvaluesresult[ParameterDbType=Int]System.Nullable Id1[ParameterDbType=VarChar100]string Id2 { IExecuteResult=this.ExecuteMethodCallthis,MethodInfoMethodInfo.GetCurrentMethod,Id1,Id2; 返回IMultipleResultsresult.ReturnValue; } 方法调用:

var resultValues=cont1.getvaluesresultConvert.ToInt32clsSession.id1,101; var resultValuesList=resultValues.GetResult.ToList; 如果结果值列表!=null&&resultValuesList.Count>0 { var dataTable=resultValuesList.ToDataTable; //执行一些任务 } 我的存储过程如下所示:

创建过程获取值 @Id2 VARCHAR50, @Id1整数 像 开始 声明@temp表id INT 插入到@temp中 从表1中选择id 从表2中选择* 从@temp中选择* 终止 我想知道如何从存储过程中获取两个返回的表

我不想将存储过程中的表作为一个表连接起来

var resultValues = cont1.getvaluesresult(Convert.ToInt32(clsSession.id1), 
"101");
var resultValuesList = resultValues.GetResult<Values_Result>
().ToList<Values_Result>();
if (resultValuesList != null && resultValuesList.Count > 0)
 {
DataSet ds = resultValuesList.ToDataTable();
 // performing some tasks
 }
此数据集可以存储多个表,您可以使用ADO.NET使用它:

SqlConnection con = new SqlConnection("YourConnection String");
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
cmd = new SqlCommand("get_values", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Id2", id); // if you have parameters.
da = new SqlDataAdapter(cmd);
da.Fill(ds);
con.Close();

// ds.Tables[0] your first select statement
// ds.Tables[1] your second select statement
使用实体框架:

// Create a SQL command to execute the sproc
var cmd = db.Database.Connection.CreateCommand(); // db is your data context
cmd.CommandText = "[dbo].[get_values]";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Id2", id); // if you have parameters.

db.Database.Connection.Open();
var reader = cmd.ExecuteReader();

// Read Table2 from the first result set
var table2 = ((IObjectContextAdapter)db)
            .ObjectContext
            .Translate<Table2Model>(reader, "table2", MergeOption.AppendOnly);   

// Move to second result set and read @temp
reader.NextResult();
var temp = ((IObjectContextAdapter)db)
            .ObjectContext
            .Translate<TempModel>(reader, "temp", MergeOption.AppendOnly); 
// I forgot if you need to use @temp or temp only
您需要为第二个表再次调用GetResult函数

如果存储过程的结果是多个表结果,则应再次调用GetResult函数以检索下一个表结果

        var resultValues = cont1.getvaluesresult(Convert.ToInt32(clsSession.id1), "101");

        // For table2
        var resultValuesList1 = resultValues.GetResult<Values_Result>().ToList<Values_Result>();

        if (resultValuesList1 != null && resultValuesList1.Count > 0)
        {
            var dataTable = resultValuesList1.ToDataTable();
            // performing some tasks
        }

        // For temp table
        var resultValuesList2 = resultValues.GetResult<Values_Result>().ToList<Values_Result>();

        if (resultValuesList2 != null && resultValuesList2.Count > 0)
        {
            var dataTable = resultValuesList2.ToDataTable();
            // performing some tasks
        }

这个主意很好。但是“resultValuesList”只包含第一个表值,我会选择ViewModel并返回2个表作为1