0

私が持っているシナリオと私が探している解決策について詳しく説明しましょう。まず、2つのテーブルや「ここで止まらない」というメッセージなどの単純なものを出力するストアドプロシージャを作成しました。

T-SQL:

USE [mydb]
GO
/****** Object:  StoredProcedure [dbo].[BackupDatabase]    Script Date: 2/26/2013 11:29:10 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create PROCEDURE [dbo].[testing]
AS
BEGIN
    select 'A' firstname, 'B' lastname;

    print 'dont stop here'

    select 1 final
END

これまで、datarowcollectionクラスを使用して単一の方法でテーブルを取得していましたが、静的メソッドは次のようになりました。

C#:

 public static class DataMan
    {
        public static DataRowCollection SelectData(string sql)
        {
            SqlDataSource DS = new SqlDataSource(CS, sql);
            return ((DataView)DS.Select(DataSourceSelectArguments.Empty)).ToTable().Rows;
        }
public static string CS =  ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
}

ここで、ここのように必要なものを簡単に取得し、必要なevver行を見つけることができます。

DataRowCollection people = Util.SelectData("Select * from students")

しかし今、私は上記のようなストアドプロシージャを作成し、次のようなことを行うことを計画しています。

**DataTableCollection** people = Util.SelectData("exec dbo.Testing")

アップデート:

そのため、ストアドプロシージャから特定のテーブルを見つけることができます。

DataTable、DataSet、DataTableCollectionsを使用しようとしましたが、成功しませんでした。適切な方法で使用できません。

私を助けてください

ありがとうございました

4

1 に答える 1

3

ここで説明しているように、コードビハインドで使用できますが、SqlDataSourceは、ASP.NETマークアップページで宣言的な方法で使用されるのが一般的です。ただし、開始した内容を考慮して、ストアドプロシージャを呼び出すときは、をに設定しSqlCommandTypeStoredProcedureプロシージャの名前をに指定してSelectCommand、を返す必要がありDataReaderます。次にDataReader、は、NextResult()プロシージャが提供する各個別の結果セットを取得するために呼び出すことができるメソッドをサポートします。これを活用する方法を説明しようとする擬似コードのフレームワークは次のとおりです。

// pseudo code
void stub()
{
   SqlDataSource d = new SqlDataSource(*connection string*);
   d.DataSourceMode = SqlDataSourceMode.DataReader;
   d.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;
   d.SelectCommand = "dbo.Testing";
   // set some parameters 
   d.SelectParameters.Add("Parameter1Name","Parameter1Value"); // must be tailored to your proc!!
   d.SelectParameters.Add("Parameter2Name","Parameter2Value"); // must be tailored to        SqlDataReader r = (SqlDataReader) d.Select();

   while (r.HasRows)
   {
       while (r.Read())
       {
           // do something with each row
       }
       // advance to next result set
       r.NextResult();
   }

   r.Close();
}
于 2013-02-26T20:32:14.647 に答える