2011-06-22 15 views
0

我有一個存儲過程作爲多個結果從SQL通過設置LINQ

pr___GetArchiveData

SELECT * FROM表1

SELECT * FROM TABLE2

SELECT * FROM表3

我想把這個結果集合成一個數據集。或者訪問三個select查詢的值! 我在這當我拖放存儲過程生成的代碼如下一個DBML文件: -

global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.pr___GetArchiveData")] 
    public ISingleResult<pr___GetArchiveDataResult> pr___GetArchiveData([global::System.Data.Linq.Mapping.ParameterAttribute(DbType="UniqueIdentifier")] System.Nullable<System.Guid> projectID) 
    { 
     IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), projectID); 
     return ((ISingleResult<pr__Project_pr___GetArchiveData>)(result.ReturnValue)); 
    } 

在代碼MVC3建築+ LINQ我已經寫了代碼來獲得結果集如下: -

using (HBDataContext hb = new HBDataContext()) 
       { 
        System.Data.DataSet ds = new System.Data.DataSet(); 

        String connString = connString; 

        var conn = new System.Data.SqlClient.SqlConnection(connString); 
        var cmd = conn.CreateCommand(); 

        cmd.CommandType = System.Data.CommandType.StoredProcedure; 
        cmd.CommandText = "pr__GetArchiveData"; 
        cmd.Connection.Open(); 

        var mReader = cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess); 
        //var reader = cmd.ExecuteReader(); 

        //using (System.Data.SqlClient.SqlDataReader mReader = cmd.ExecuteReader()) 
        //{ 
        // while (mReader.Read()) 
        //{ 
        // mReader.Read(); 

        var tbl1 = hb.Translate<tbl1 >(mReader).ToList(); 

        // mReader = cmd.ExecuteReader(); 

        mReader.NextResult(); 
        var tbl2 = hb.Translate<tbl2 >(mReader).ToList(); 

        mReader.NextResult(); 
        var tbl3 = hb.Translate<tbl3>(mReader).ToList(); 


        // } 
        // } 
       } 

但在運行它會拋出錯誤的 -

「無效試圖調用NextResult當讀取器已關閉。」

我不知道我錯在哪裏!

我一直在使用它作爲同時試圖

(mReader.Read())

請建議!!!!

+0

你看着使用SP功能pr___GetArchiveData,只是返回一個ISingleResult? – esastincy

回答

0
  1. 在.dbml文件存儲過程的代碼將像

    [global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.pr__Home_GetArchiveData")] public ISingleResult<pr__Home_GetArchiveData> pr__Home_GetArchiveData([global::System.Data.Linq.Mapping.ParameterAttribute(Name="AlbumID", DbType="UniqueIdentifier")] System.Nullable<System.Guid> albumID) { IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), albumID); return ((ISingleResult<pr__Album_GetAlbumsFilesResult>)(result.ReturnValue)); }

  2. 與IMultipleResult替換它如下`

    [全球:: System.Data.Linq.Mapping.FunctionAttribute(名稱= 「dbo.pr__Home_GetArchiveData」)] [與resultType(typeof運算(TBL1))] [與resultType(typeof運算(tbl2))] [ResultType(typeof(tbl3))] [ResultType(typeof(tbl4))] public IMultipleResults pr__Home_GetArchiveData([global :: System.Data.Linq.Mapping.ParameterAttribute(Name =「HOMEID」, (this,((MethodInfo)(MethodInfo.GetCurrentMethod())),HOMEID);這個函數返回的是一個數組,這個數組是一個數組,這個數組是一個數組。 return((IMultipleResults)result.ReturnValue); }

在代碼中。

using (HBDataContext hb = new HBDataContext()) 
       { 
        using (System.Data.Linq.IMultipleResults _results = hb.pr__Home_GetArchiveData(model.HomeID)) 
        { 
         List<tbl1> _tbl1= _results.GetResult<tbl1>().ToList(); 
         List<tbl2> _tbl2= _results.GetResult<tbl2>().ToList(); 
         List<tbl3> _tbl3= _results.GetResult<tbl3>().ToList(); 
         List<tbl4> _tbl4= _results.GetResult<tbl4>().ToList();}} 

你會得到theStoredProcedure選擇查詢的值...