2016-10-13 6 views
3

5つの異なるクエリを実行するストアドプロシージャを呼び出すときに、Base64 XML出力をWeb Apiに返す必要があります。複数のデータセットをSQL Serverストアドプロシージャから返す

ストアドプロシージャは書かれていません(私はそれを書く必要がありますが)データが完全に異なるテーブルとカラムなどである5つのクエリがあります...これは可能なのでしょうか?

私はOracleで複数のカーソルを返すことができますが、SQL Serverでは、複数のデータセットまたはコレクションをasp.net 4.5(mvc c#/ Ado.net)に戻すことはできますか?これの例は何ですか?クエリ

-- Content Tab 
SELECT -- vTC.[TemplateId] 
    t.Name as "Client Name and Document" ,vTC.[SectionName] ,vTC.[ContentId] ,vTC.[ContentName] 
    ,vTC.[ContentDescription],vTC.[ContentValue] ,CAL.ContentValue as "Spanish Content" , iif(S.IsClientSection = 1, 'Global Section','Template Section') as "Global or Template Section" 
    ,DT.Title as DataType ,iif(vTC.IsRequired = 1, 'Yes', 'No') as "Required" ,vTC.[DisplayType] 
FROM [dbo].[vwTemplateContent] vTC 
left join dbo.Template t on vTC.TemplateId = t.TemplateId 
    left join dbo.DataType DT on vTC.DataTypeId = dt.datatypeid 
    left join dbo.Section S on S.SectionID = vTC.SectionID 
    left join [dbo].[ContentAlternateLanguage] CAL on vTC.ContentId = CAL.ContentID 
    where vTC.templateid in (1) 
    order by DisplayOrder 

答えて

6

ですDataSetは複数のテーブルをADO.netに対応しています。

あなたのDataSetを埋めるために、コードの下に参照してください:この後

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

をあなたは

ds.Tables[0] 
ds.Tables[1] 
.. 

を使用して、異なる複数のレコードセットを利用することができ、それはあなたに

おかげ

に役立ちます願っています
0

のちょうどONEの

例はい、それは可能です。選択したクエリを書くだけで、DataSetのデータが得られます。 1つの選択クエリがある場合はDataTable、選択クエリ(Say 5)がある場合はに5 DataTableが入ります。それはとても簡単です。手続きを書いて楽しみましょう。

編集:ストアドプロシージャ(擬似コード)の 例は以下のとおりである:

create Proc Name_Of_Proc 
(
    @FirstParam DataType, 
    @SecondParam DataType 
) 
AS 
Begin 
    Select statement 1 
    Select statement 2 
    Select statement 3 --and so on upto n. 
end 

あなたのデータベースでこれを行う必要があります。これを実行したら、ADO.NETを使用してC#からこのプロシージャを実行する必要があります。これを行うには、SqlConnectionSqlCommandSqlDataReaderオブジェクトを使用する必要があります。より多くの例をGoogleまたはSO自体で検索することができます。

CREATE PROCEDURE SPName 
(
/*Declare your parameters*/ 
@parm1 dataType 
) 
AS 
BEGIN 
/*Write your select statements below*/ 
-- SELECT * FROM tblName 
-- SELECT * FROM tblName2 

END 

あなたのDataSetにこれらのレコードを記入する必要がありますようにそのようなリンクを使用すると、複数のテーブルを得ようとしているなら、あなたは以下のようなあなたのストアドプロシージャに複数のselect文を記述する必要がHow to execute Stored procedure in c#

+0

が含まれています。sprocとc#ado.netはどのように記述しますか? SPROCのSprocNameを作成.... テーブルセレクトZ、H、M、iは表Bから 選択Y、U、BBから表CからA、B、C、D、Eを選択 –

1

ここに基本的な例があります:

SQL PROC:

CREATE PROCEDURE usp_getStudentsAndClasses 
    @ClassName  varchar(50) 
, @IsActive  bit 
AS 
BEGIN 
    --First select is first table 
    SELECT * 
    FROM Students 

    --Second select is second table, etc. 
    SELECT * 
    FROM Classes 

    --Third table... 
    --Can be more complex, as long as there is a result set 
    SELECT s.FirstName 
    ,  s.LastName 
    FROM Students   s 
    JOIN StudentSeating  ss 
    ON  s.StudentID  = ss.StudentID 
    JOIN Classes    c 
    ON  c.ClassID  = ss.ClassID 
    WHERE s.IsActive  = @IsActive 
    AND  c.Name   = @ClassName 

END 

C#の機能:

public DataSet GetDataSet(SqlConnection connection, string storedProcName, params SqlParameter[] parameters) 
    { 
     var command = new SqlCommand(storedProcName, connection) { CommandType = CommandType.StoredProcedure }; 
     command.Parameters.AddRange(parameters); 

     var result = new DataSet(); 
     var dataAdapter = new SqlDataAdapter(command); 
     dataAdapter.Fill(result); 

     return result; 
    } 

C#の使用法:あなたは同じように

 var connection = new SqlConnection("Your_connection_string"); 
     var parameters = new SqlParameter[] 
     { 
      new SqlParameter("ClassName", "Robotics"),  //example of string value 
      new SqlParameter("IsActive", true)    //example of numeric value 
     }; 
     var dataSet = GetDataSet(connection, "usp_getStudentsAndClasses", parameters); 

     var firstTable = dataSet?.Tables?[0]; //use as any other data table... 

お知らせ、それはほとんど同じコードであります〜のために使う返されるデータ型がDataTableではなく、DataSetであることを除いて、単一テーブルストアドプロシージャです。 DataSetには、DataTableCollectionMore info on MSDN

関連する問題