C# 存储过程返回多个记录集

C# 存储过程返回多个记录集,c#,web-applications,multiple-resultsets,C#,Web Applications,Multiple Resultsets,我对c#还很陌生。 我有一个需要多个记录集的页面,以及一个返回记录集的存储过程。我正在对主记录集使用中继器控件。如何到达下一个返回的记录集 好的,所以数据源在aspx页面中。我会把它移到代码隐藏页面来使用NextResult,对吗?这是我的代码。如何将数据源移动到codebehind,实现datareader以便使用nextresult <asp:SqlDataSource ID="AssetMgtSearch" runat="server" Conne

我对c#还很陌生。 我有一个需要多个记录集的页面,以及一个返回记录集的存储过程。我正在对主记录集使用中继器控件。如何到达下一个返回的记录集


好的,所以数据源在aspx页面中。我会把它移到代码隐藏页面来使用NextResult,对吗?这是我的代码。如何将数据源移动到codebehind,实现datareader以便使用nextresult

<asp:SqlDataSource ID="AssetMgtSearch" runat="server" 
                ConnectionString="<%$ ConnectionStrings:OperationConnectionString %>" 
                SelectCommand="spAssetMgtItemList" SelectCommandType="StoredProcedure">
            </asp:SqlDataSource>
            <div class="contentListFullHeight">
                <table cellspacing="0" cellpadding="0" border="0" class="contentList">
                    <tr>
                        <th>ShipmentID/</td>
                        <th>MaterialID/</td>
                        <th>ItemID/</td>
                    </tr>
                    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="AssetMgtSearch">
                        <ItemTemplate> 
                            <tr>
                                <td colspan="3" style="border-top:solid thin blue">&nbsp;</td>
                            </tr>
                            <tr>
                                <td><%#Container.DataItem(0)%></td>
                                <td><%#Container.DataItem(1)%></td>
                                <td><%#Container.DataItem(2)%></td>
                            </tr>
                        </ItemTemplate>                           
                    </asp:Repeater>
                </table>

ShipmentID/
实现/
项目ID/
在读取器上调用NextResult()方法以转到下一个结果

不,不能使用SqlDataSource执行此操作,需要使用codebehind或将过程分解为单独的查询。

在读取器上调用NextResult()方法以转到下一个结果


不,您不能使用SqlDataSource执行此操作,您需要使用codebehind或将过程分解为单独的查询。

谢谢大家的回答。如果您在拖放控件创建过程中做了很多更改,那么NextResult()可以很好地工作。给你

  • 从aspx页面中删除数据源
  • 从Repeater控件中删除DataSourceID属性
  • 在codebehind中创建一个返回datareader对象的函数。例如AstMgtDr()
  • 在页面加载中,为Repeater控件设置数据源和数据绑定属性

    Repeater1.DataSource=AstMgtDr()

    Repeater1.DataBind()

  • 在aspx页面的顶部,添加一个页面级指令以使用“System.Data.Common” 名称空间

  • 要显示数据,请执行以下操作:

  • 这是最好的方法 但它需要明确的 打字

    ``
    
    这是使用字段的另一种方法 名称-比其他名称更昂贵 以前的方法,但比默认值快

    ``
    

    希望这能为其他人节省一些时间。

    谢谢大家的回答。如果您在拖放控件创建过程中做了很多更改,那么NextResult()可以很好地工作。给你

  • 从aspx页面中删除数据源
  • 从Repeater控件中删除DataSourceID属性
  • 在codebehind中创建一个返回datareader对象的函数。例如AstMgtDr()
  • 在页面加载中,为Repeater控件设置数据源和数据绑定属性

    Repeater1.DataSource=AstMgtDr()

    Repeater1.DataBind()

  • 在aspx页面的顶部,添加一个页面级指令以使用“System.Data.Common” 名称空间

  • 要显示数据,请执行以下操作:

  • 这是最好的方法 但它需要明确的 打字

    ``
    
    这是使用字段的另一种方法 名称-比其他名称更昂贵 以前的方法,但比默认值快

    ``
    

    希望这能为其他人节省一些时间。

    这个问题已经被浏览了很多次,我只想提交我自己的解决方案。
    我知道最初的问题是c#,但我支持遗留系统,而且代码转换很容易。

    今天我想到了这个。我需要一种快速而肮脏的方式来显示返回7个不同数据集的存储过程的结果。

    为此,我用存储过程结果填充System.Data.DataSet。然后动态创建数据网格,并将它们添加到占位符中。

    HTML代码:

    <html>
      <body>
      <form id="form1" runat="server">
        <asp:PlaceHolder ID="phMetrics" runat="server"/>
      </form>
      </body>
    </html>
    

    这个问题已经被浏览了很多次,我只想提交我自己的解决方案。
    我知道最初的问题是c#,但我支持遗留系统,代码转换很容易。

    今天我想到了这个。我需要一种快速而肮脏的方式来显示返回7个不同数据集的存储过程的结果。

    为此,我用存储过程结果填充System.Data.DataSet。然后动态创建数据网格,并将它们添加到占位符中。

    HTML代码:

    <html>
      <body>
      <form id="form1" runat="server">
        <asp:PlaceHolder ID="phMetrics" runat="server"/>
      </form>
      </body>
    </html>
    

    哈哈。事实上我甚至不得不去查它,因为我已经很久没有亲自接触过数据阅读器了。谢谢你给我指明了正确的方向。由于我的经验不足,我希望您能再详细阐述一下。其实没有太多的内容——当您需要下一个结果集时,只需在reader对象上调用NextResult()方法即可。也许,如果你能发布一些代码,显示你试图连接什么,有人可以给你一些提示。我编辑了问题并添加了代码。我希望它能澄清我所遗漏的这一难题。提前谢谢。这是一个简单的解决方案,我花了好几个小时试图解决它。。。非常感谢!哈哈。事实上我甚至不得不去查它,因为我已经很久没有亲自接触过数据阅读器了。谢谢你给我指明了正确的方向。由于我的经验不足,我希望您能再详细阐述一下。其实没有太多的内容——当您需要下一个结果集时,只需在reader对象上调用NextResult()方法即可。也许,如果你能发布一些代码,显示你试图连接什么,有人可以给你一些提示。我编辑了问题并添加了代码。我希望它能澄清我所遗漏的这一难题。提前谢谢你
    <html>
      <body>
      <form id="form1" runat="server">
        <asp:PlaceHolder ID="phMetrics" runat="server"/>
      </form>
      </body>
    </html>
    
    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim ds As System.Data.DataSet = Me.GetMetrics()
        If ds IsNot Nothing Then
            For i As Integer = 0 To ds.Tables.Count - 1
                Dim _rpt As New System.Web.UI.WebControls.DataGrid()
                With _rpt
                    .AutoGenerateColumns = True
                    .Attributes.Add("name", "table_" & i + 1)
                    .DataSource = ds.Tables(i)
                    .DataBind()
                End With
                Me.phMetrics.Controls.Add(_rpt)
            Next
        End If
    End Sub
    
    Private Function GetMetrics() As System.Data.DataSet
        Dim dsMetrics As New System.Data.DataSet
    
        Using _sqlConn As New System.Data.SqlClient.SqlConnection(_sqlConnString)
            _sqlConn.Open()
            Dim _SqlCommand As New System.Data.SqlClient.SqlCommand("[dbo].[My_Stored_Procedure]", _sqlConn)
            With _SqlCommand
                .CommandType = System.Data.CommandType.StoredProcedure
                .Parameters.Add(New System.Data.SqlClient.SqlParameter("@ClientID", 101))
            End With
            Dim _sqlAdapter As New System.Data.SqlClient.SqlDataAdapter(_SqlCommand)
            With _sqlAdapter
                .Fill(dsMetrics)
                .Dispose()
            End With
            _sqlConn.Close()
            _sqlConn.Dispose()
        End Using
    
        Return dsMetrics
    End Function