aspx.vb 中未提供存储过程的参数

Stored procedure's parameter was not supplied in aspx.vb

我想使用 SQL 服务器存储过程在 gridview 中显示数据。该界面应包括两个文本框,用于两个参数、一个按钮和一个网格视图。填写所有参数并单击按钮后,将显示数据。但是我收到一条错误消息

'Procedure or function 'uspGetBillOfMaterials' expects parameter '@StartProductID', which was not supplied.'

编辑 1:我发现我调用了参数 StartProducID 而不是 StartProductID。谢谢你们帮我解决这个问题。我解决了这个问题。

现在我收到一个新错误:

Both DataSource and DataSourceID are defined on 'GridView1'. Remove one definition.

希望你能帮我找出我的问题所在以及解决方法。

谢谢。

编辑 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”而不是“StartProducID”。

第二个错误是因为我在 C# 代码和 Vb 代码中都定义了 gridview。我删除了代码隐藏中的最后两行并且它起作用了。这是帮助我解决问题的 link

谢谢大家