读书人

.net entity framework 存储过程 会直

发布时间: 2012-12-16 12:02:32 作者: rapoo

.net entity framework 存储过程 能直接返回 datatable吗
因为需要实现的是一个报表功能

列是按照 用户 在界面上选择的 列 来自动生成的

所以每次出来的数据部固定 无法使用 实体类型来 映射

设计器并没有提供对返回值不是实体(比如无返回值和标量返回值)的存储过程的自动生成

求大神给点方案

设计器并没有提供对返回值不是实体(比如无返回值和标量返回值)的存储过程的自动生成。

.net framework 4.0


存储过程如下:


ALTER Proc BroadBand_GetReports
(
@CableID VarChar(200),
@WorkStationID INT,
@StartTime datetime,
@EndTime datetime
)

as

--BEGIN REPORT

--1. select data

select r.ID,
r.CableID,
r.SubCabelID,
r.ProductCode,
r.WorkStationID,
r.DataElementID,
r.DataElementValue,
r.CreateUser,
r.ChangeUser,
r.ChangeDate,
r.CreateDate,
r.ShiftID,
r.Category,
r.Property1,
r.Property2,
r.Property3,
r.Property4,
r.Property5,
w.WorkStationName + e.DataElementName AS element
into #tempnpi
from RoutingWorkstationDataElement r,
DataElement e,
WorkStation w
where r.DataElementID=e.DataElementID and r.WorkStationID = w.ID
and r.changeDate between '2012-07-10' AND '2012-07-12'


--2. summary multi times to only one

DECLARE @DataElementID INT, @DataElementValue Varchar(500)

DECLARE Element_Cursor CURSOR FOR

SELECT CableID, WorkStationID, DataElementID, DataElementValue from #tempnpi




OPEN Element_Cursor

FETCH NEXT FROM Element_Cursor INTO @CableID, @WorkStationID, @DataElementID, @DataElementValue

WHILE @@FETCH_STATUS = 0

BEGIN

update #tempnpi

set DataElementValue = DataElementValue + '; ' + (select DataElementValue from #tempnpi where CableID=@CableID and workstationid=@WorkStationID

and DataElementID = @DataElementID )

where CableID=@CableID and workstationid=@WorkStationID and DataElementID = @DataElementID
and DataElementValue = ''

FETCH NEXT FROM Element_Cursor INTO @CableID, @WorkStationID, @DataElementID, @DataElementValue

END

CLOSE Element_Cursor

DEALLOCATE Element_Cursor



--3. pivot

DECLARE @Eachfield NvarChar(200)

DECLARE @WorkStationIDNoMean INT

DECLARE @Fields NvarChar(MAX)

SET @Fields = ''

DECLARE FILEDS_CURSOR CURSOR FOR

SELECT DISTINCT workstationid, Element From #tempnpi Order by Workstationid


OPEN FILEDS_CURSOR



FETCH NEXT FROM FILEDS_CURSOR INTO @WorkStationIDNoMean,@Eachfield

WHILE @@FETCH_STATUS = 0

BEGIN

SET @Fields = @Fields + '[' + @Eachfield + '],'

FETCH NEXT FROM FILEDS_CURSOR INTO @WorkStationIDNoMean,@Eachfield

END

CLOSE FILEDS_CURSOR

DEALLOCATE FILEDS_CURSOR



DECLARE @SQL NvarChar(MAX)

SET @SQL =

'SELECT ProductCode,CableID , '+

SubString(@Fields,1, Len(@Fields)-1)+

'FROM

(SELECT ProductCode,CableID, ELEMENT, DataElementValue

FROM #tempnpi ) AS SourceTable

PIVOT

(

MAX(DataElementValue)

FOR ELEMENT IN ('+SubString(@Fields,1, Len(@Fields)-1)+

')) AS PivotTable'



EXEC (@SQL)

drop table #tempnpi


[最优解释]
可以写一个方法返回一个DateTable吧,我就是这么做的

public DataTable GetReportsBySomething(string id)
{
DataTable dtList = new DataTable();
dtList.Columns.Add(new DataColumn("员工", typeof(string)));
dtList.Columns.Add(new DataColumn("使用时间", typeof(string)));
var work = GetWorkList(p=>条件);
foreach (var w in work)


{
DataRow drRow = dtList.NewRow();
drRow[0] = GetNameById(w.Key);
drRow[1] = w.TotalTime;
dtList.Rows.Add(drRow);
}
return dtList;
}



[其他解释]
引用:
可以写一个方法返回一个DateTable吧,我就是这么做的
C# code

public DataTable GetReportsBySomething(string id)
{
DataTable dtList = new DataTable();
dtList.Columns.Add(new DataColumn("员工", typeof……

当然方法有很多,就这个思路吧 new一个datatable,然后再把你查出来的泛型遍历到这个表里
但是这个写的貌似不是公用的 需要改改吧
[其他解释]
我用EF,返回list《实体》 绑定rdlc报表 ,代码如下:
private void LoadDataSource(List<ExecProfitOfStatistics_Result> datasource)
{
this.rvEmp.LocalReport.DataSources.Clear();
ReportParameter rpCountry = new ReportParameter("departcodeReport", "2");
this.rvEmp.LocalReport.SetParameters(new ReportParameter[] { rpCountry });
this.rvEmp.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", datasource));
this.rvEmp.LocalReport.Refresh();
}
[其他解释]
楼主,你有没有遇到我这样的问题?
http://topic.csdn.net/u/20120720/10/c93cc81e-2b56-43d9-b38f-1c6f93469cd1.html?27695
[其他解释]
这个简单 读取出来后LIST

写个万能转换 LIST TO DATATABLE

用反射

http://www.cnblogs.com/linyijia/archive/2010/12/31/1923091.html
[其他解释]
http://www.cnblogs.com/wlflovenet/archive/2011/12/30/EF11.html

看我写的文章 第八条
[其他解释]
http://www.cnblogs.com/yangtongnet/archive/2010/07/06/1772314.html


去看看这个,我也在使用linq to entity 我用的就是这个
[其他解释]
有没有人知道啊?

顶上去。。。
[其他解释]
还是没人知道啊?

EF 4.0 没人用么?
------其他解决方案--------------------


谢谢回复
我用的 entity framework的 ORM。。
里面的返回类型 只有三张
无返回值,返回标量 和 负责类型....
我只是想象 ADO.NET 一样直接返回 存储过程执行的结果

引用:
可以写一个方法返回一个DateTable吧,我就是这么做的
C# code

public DataTable GetReportsBySomething(string id)
{
DataTable dtList = new DataTable();
dtList.Columns.Add(new DataColumn("员工", typeof……

[其他解释]
那就直接用ADO.NET多好。。。
[其他解释]
写个公用方法
[其他解释]
返回DataTable的还真没见过!!!

读书人网 >.NET

热点推荐