【问题标题】:SqlDataReader collecting one row value instead of all rows? Confused & new to SqlDataReadersSqlDataReader 收集一行值而不是所有行?对 SqlDataReaders 感到困惑和陌生
【发布时间】:2018-04-03 17:47:16
【问题描述】:

两个表:

CART(CartID、UserID、DateCreated、ProductID、ProductName、Size、Price、Quantity、Subtotal、HoursWork)

产品(ProductID、名称、SDescription、价格、尺寸、图像、缩略图、重量、LDescription、库存、CategoryID、HoursWork)

我正在尝试做的事情: 根据 SELECT 语句选择的 所有 类别 ID 显示两个按钮之一。

类别 ID 的范围为 1-7。如果选择的任何 CategoryID 匹配“1”“2”或“7”,则应显示“创建预订”按钮,否则应显示“交付选项”按钮。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)

       'Display the correct button:
    Dim conn As SqlConnection = New SqlConnection(ConnectionString)
    Dim cmd As SqlCommand = New SqlCommand
    cmd.CommandText = "SELECT products.CategoryID FROM Products INNER JOIN Cart on products.ProductID = cart.ProductID WHERE ([UserID] = @UserID) AND ([DateCreated] = CONVERT(date, GETDATE()))"

    Dim UserID As SqlParameter = New SqlParameter("@UserID", SqlDbType.NVarChar, 128)
    UserID.Value = "249f38b8-e745-44f4-8d78-806b0e5e7e0e"
    cmd.Parameters.Add(UserID)

    cmd.Connection = conn
    conn.Open()
    cmd.ExecuteNonQuery()

    Dim reader As SqlDataReader = cmd.ExecuteReader
    Dim CategoryID As Integer

    While reader.Read()
         'CategoryID = reader.GetValue(0)
    CategoryID = CType(reader("CategoryID"), Integer)
    End While
    conn.Close()

    lblTest.Text = CategoryID

    If CategoryID = "1" Or "2" Or "7" Then
            btnCreateBooking.Visible = True
        Else
            btnDeliveryOptions.Visible = True
        End If
End Sub

但是,购物车中最后一个产品的CategoryID是由SqlDataReader生成到标签/变量中的,甚至只显示了“创建预订”按钮 .

【问题讨论】:

  • 先看例子here

标签: asp.net if-statement sqldatareader


【解决方案1】:

在这里找到答案:https://forums.asp.net/t/1401666.aspx?C+datareader+returning+multiple+rows+and+asp+Label+question+

If reader.HasRows Then
        While reader.Read()
            lblTest.Text = (lblTest.Text _
                + (reader("CategoryID").ToString + "<br>"))
        End While
        conn.Close()
    End If 

并将我的 if 语句更正为:

If lblTest.Text.Contains("1") Or lblTest.Text.Contains("2") Or lblTest.Text.Contains("7") Then
        btnCreateBooking.Visible = True
    Else
        btnDeliveryOptions.Visible = True
        End If

【讨论】:

    猜你喜欢
    • 2013-02-17
    • 2010-10-17
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多