[英]Stored Procedure Returns Multiple Recordsets
我是 c# 的新手。我有一个页面需要多个记录集,以及一个返回它们的存储过程。 我正在为主记录集使用转发器控件。 我如何到达下一个返回的记录集?
好的所以数据源在 aspx 页面中。 我会把它移到页面后面的代码以使用 NextResult 吗? 这是我的代码。 如何将数据源移动到代码隐藏,实现数据读取器以便我可以使用 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"> </td>
</tr>
<tr>
<td><%#Container.DataItem(0)%></td>
<td><%#Container.DataItem(1)%></td>
<td><%#Container.DataItem(2)%></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
在阅读器上调用 NextResult() 方法以移动到下一个结果。
不,您不能使用 SqlDataSource 执行此操作,您需要使用代码隐藏或将过程分解为单独的查询。
谢谢大家的回答。 如果您从创建拖放控件开始进行大量更改,NextResult() 将运行良好。 他们来了。
在您的页面加载上,为 Repeater 控件设置数据源和数据绑定属性
Repeater1.DataSource = AstMgtDr();
Repeater1.DataBind();
在您的 aspx 页面顶部,添加页面级指令以使用“System.Data.Common”命名空间<%@ Import namespace="System.Data.Common" %>
要显示您的数据:
这是性能最好的方法,但它需要显式输入
`<%#((DbDataRecord)Container.DataItem).GetInt32(0)%>`
这是另一种使用字段名称的方法 - 比以前的方法更昂贵,但比默认的 Eval 更快。
`<%# ((DbDataRecord)Container.DataItem)["ShipmentID"] %>`
希望这可以节省其他人一些时间。
这个问题已经被看过很多次了,我只是想提交我自己的解决方案。
我知道最初的问题是 c#,但我支持遗留系统并且很容易转换代码。
这是我今天想到的。 我需要一种快速而简单的方法来显示返回 7 个不同数据集的存储过程的结果。
我通过用我的存储过程结果填充 System.Data.DataSet 来解决这个问题。 然后动态创建 DataGrids,并将它们添加到 PlaceHolder。
HTML 代码:
<html>
<body>
<form id="form1" runat="server">
<asp:PlaceHolder ID="phMetrics" runat="server"/>
</form>
</body>
</html>
VB.NET 代码:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.