我有一个返回未知数据量的SP,这是我的查询示例:
MySP:
WHILE (@counter <= @SomeParameter)
BEGIN
Select *
From tblFoo
Where tblFoo.Counter=@counter
@counter=@counter+1
END
为了有效地存储数据,我想使用DataSet,它将在每个DataTable中存储每个选择的结果。
由于我的应用程序基于EF 5,我尝试用我的dbContext
对象调用我的SP,这是我尝试做的。
var ds=db.Database.SqlQuery<DataSet>("MySP @counter @SomeParameter", value1,value2);
这似乎无法正常工作。
我想过使用经典的ADO.NET来解决这个问题,并使用SqlDataAdapter
,但我不知道如何将原始的连接引用从dbContext
传递给SqlDataAdapter
} .Connection属性,因为它的类型不同。
注意:我在这个问题上使用DataSet而不是Entities Collection的原因是因为我从SP获得的结果可能有不同的列,因此我不确定Entities Collection是否会这样做。
我想知道如何使用Entities(或SqlAdapter)调用我的SP来填充我的DataSet中的每个表,以及每个从我的SP中选择的结果。
我在EF很新鲜,所以如果我在思考或做任何错事,任何提示都会受到影响。
答案 0 :(得分:1)
您可以尝试使用此代码 - 基于SqlDataAdapter
类
var connectionString = "...";
using (SqlConnection connection =
new SqlConnection(connectionString))
{
SqlDataAdapter adapter = new SqlDataAdapter();
var cmd = new SqlCommand("YourSP", connection);//Adjust your stored procedure name
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@SomeParameter", YourValue));//Adjust your value
adapter.SelectCommand = cmd;
adapter.Fill(dataset);
return dataset;
}