首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

.net entity framework 存储过程 会直接返回 datatable吗

2012-12-16 
.net entity framework 存储过程 能直接返回 datatable吗因为需要实现的是一个报表功能列是按照 用户 在界

.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的还真没见过!!!

热点排行