【发布时间】:2021-02-27 06:48:52
【问题描述】:
我想使用 SQL Server 存储过程在网格视图中显示数据。该界面应包括两个用于两个参数的文本框、一个按钮和一个网格视图。填写完所有参数并单击按钮后将显示数据。但我收到一个错误提示
'过程或函数'uspGetBillOfMaterials'需要参数'@StartProductID',但未提供。'
编辑1:我发现我调用了参数StartProducID而不是StartProductID。谢谢你们帮我解决这个问题。我解决了这个问题。
现在我收到一个新错误:
DataSource 和 DataSourceID 均在“GridView1”上定义。删除一个定义。
希望您能帮我找出问题出在哪里以及解决问题的方法。
谢谢。
编辑 2:我发现了我的问题并在下面发布了答案。基本上,我只是删除了我的代码隐藏中的最后两行并且它起作用了。
这是我在 ASP.NET 中的代码:
Please enter StartedProduct <asp:TextBox ID="StartProductID" runat="server"></asp:TextBox>
<br />
Please enter Date <asp:TextBox ID="CheckDate" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="Search BOM" />
<br />
<asp:GridView ID="GridView1" runat="server" DataSourceID="TestProc" AutoGenerateColumns="True">
<Columns>
<asp:BoundField DataField="ProductAssemblyID" HeaderText="ProductAssemblyID" ReadOnly="True" SortExpression="ProductAssemblyID" />
<asp:BoundField DataField="ComponentID" HeaderText="ComponentID" ReadOnly="True" SortExpression="ComponentID" />
<asp:BoundField DataField="ComponentDesc" HeaderText="ComponentDesc" ReadOnly="True" SortExpression="ComponentDesc" />
<asp:BoundField DataField="TotalQuantity" HeaderText="TotalQuantity" ReadOnly="True" SortExpression="TotalQuantity" />
<asp:BoundField DataField="StandardCost" HeaderText="StandardCost" ReadOnly="True" SortExpression="StandardCost" />
<asp:BoundField DataField="ListPrice" HeaderText="ListPrice" ReadOnly="True" SortExpression="ListPrice" />
<asp:BoundField DataField="BOMLevel" HeaderText="BOMLevel" ReadOnly="True" SortExpression="BOMLevel" />
<asp:BoundField DataField="RecursionLevel" HeaderText="RecursionLevel" ReadOnly="True" SortExpression="RecursionLevel" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="TestProc" runat="server"
ConnectionString="<%$ ConnectionStrings:AdventureWorks2014ConnectionString %>"
SelectCommand="uspGetBillOfMaterials"
SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:ControlParameter ControlID="StartProductID" Name="StartProductID" PropertyName="Text" Type="Int32" />
<asp:ControlParameter ControlID="CheckDate" Name="CheckDate" PropertyName="Text" Type="DateTime" />
</SelectParameters>
</asp:SqlDataSource>
这是我的代码隐藏:
Public Class TestStoredProcedure
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim command As New SqlCommand()
Dim adapter As New SqlDataAdapter()
Dim ds As New DataSet()
Dim i As Integer = 0
Dim sql As String = Nothing
Dim connetionString As String = "Data Source=(local);Initial Catalog=AdventureWorks2014;Integrated Security=True"
Dim connection As New SqlConnection(connetionString)
connection.Open()
command.Connection = connection
command.CommandType = CommandType.StoredProcedure
command.CommandText = "uspGetBillOfMaterials"
command.Parameters.AddWithValue("StartProductID", StartProductID.Text)
command.Parameters.AddWithValue("@CheckDate", CheckDate.Text)
adapter = New SqlDataAdapter(command)
adapter.Fill(ds)
connection.Close()
GridView1.DataSource = ds.Tables(0)
GridView1.DataBind()
End Sub
End Class
【问题讨论】:
-
"期望参数 '@StartProductID'" - 查看您提供的名称。
-
command.Parameters.AddWithValue("StartProducID", StartProductID.Text) 是那种应该说 StartProductID 的类型?
-
哦,谢谢!!!多么愚蠢的错误……
-
@TnTinMn 谢谢!我解决了这个问题,现在它说“DataSource 和 DataSourceID 都在 'GridView1' 上定义。删除一个定义。”你能帮我解决这个问题吗?
-
@Hursey 感谢您的指出。我解决了这个问题。现在我有一个新错误是“DataSource 和 DataSourceID 都在 'GridView1 上定义”。你能帮我解决这个问题吗?谢谢。
标签: asp.net sql-server vb.net visual-studio gridview