【问题标题】:Stored procedure's parameter was not supplied in aspx.vbaspx.vb 中未提供存储过程的参数
【发布时间】: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


【解决方案1】:

我发现了我的问题:

第一个错误是因为参数名称错误。它应该是“StartProductID”而不是“StartProductID”。

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

谢谢大家。

【讨论】:

  • 为什么不直接声明您在网格中定义了数据源,如果您使用代码,则必须删除该设置。错误消息是 100% 清楚的。如果您使用代码,则删除页面上的数据源,然后删除数据网格属性表中的设置。这与 C# 和 vb.net 代码有关的一些内容为零。当然,你不能定义一个页面同时包含 vb 和 c# 代码。
  • 很高兴您找到了解决方案。也许您可以将其标记为答案。
  • @AlbertD.Kallal 感谢您的评论。我是 ASP.net 以及 C# 和 VB 的新手。这就是我无法解释错误消息的原因。无论如何,感谢您的所有帮助,我吸取了教训。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多