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;
}

在这里我可以很容易地得到我需要的东西,并找到我想要的任何行:

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 回答