0

我正在为我的学校计算课程建立一个房间预订服务,我不完全确定如何从数据库中检索以前进行的预订。我知道如何连接到数据库并读取一个条目而不是多个条目。

到目前为止,我有:

   strBookingQuery = "SELECT * FROM bookings WHERE Date = '" & ConvertedBookingDate & "'"

    Dim Cmd As New MySqlCommand(strBookingQuery, Newconnection)
    Newconnection.ConnectionString = strServerString
    Newconnection.Open()
    reader = Cmd.ExecuteReader()
    reader.Read()

这会从数据库中提取 5 个变量,日期、预订期间、预订时长、用户 ID 和房间 ID,我希望将它们写入整数,最后四个变量写入整数数组,数组大小为 7,因为一天中的最大预订数量为 7。任何帮助将不胜感激 :)

我也为任何糟糕的编码道歉,我是一名 A 级学生,所以我已经很长时间没有真正编码。

类似的东西?

Function GetBookingData()

    strBookingQuery = "SELECT * FROM bookings WHERE Date = '" & ConvertedBookingDate & "'"

    Dim Cmd As New MySqlCommand(strBookingQuery, Newconnection)
    Newconnection.ConnectionString = strServerString
    Newconnection.Open()
    reader = Cmd.ExecuteReader()
    reader.Read()
    For SP = 1 To intBookingCount
        Do While reader.Read()
            StartPeriod(SP) = reader.GetInt16(1)
        Loop
        MsgBox(StartPeriod(SP))
    Next

    Newconnection.Close()

End Function
4

1 回答 1

0

目前尚不完全清楚你正在尝试做什么,但我怀疑你真正想要的是这样的:

Function GetBookingData()
    strBookingQuery = "SELECT * FROM bookings WHERE Date = '" & ConvertedBookingDate & "'"
    Dim Cmd As New MySqlCommand(strBookingQuery, Newconnection)
    Newconnection.ConnectionString = strServerString
    Newconnection.Open()
    reader = Cmd.ExecuteReader()
    For SP = 1 To intBookingCount
        If Not reader.Read() Then
            Exit For
        End If
        StartPeriod(SP) = reader.GetInt16(1)
        MsgBox(StartPeriod(SP))
    Next
    Newconnection.Close()    
End Function

但是,我会提出一些进一步的建议。首先,您应该Using尽可能为您使用的每个IDisposable对象添加一个块(例如 Newconnection、Cmd)。该Using块更安全,因为如果执行因任何原因离开该块(例如异常),它仍然会为您正确处理该对象。

其次,您应该在命令中使用参数,而不是将日期值直接附加到strBookingQuery字符串中。当您像这样自己将值附加到 SQL 字符串中时,您的数据库就会受到 SQL 注入攻击。此外,特别是日期,您也可能会遇到文化差异(例如 MM-dd-yyyy 与 dd-MM-yyyy)。

第三,使用某种集合会更容易,例如List(Of Integer)存储从数据库读取的值,而不是存储到数组中。假设行数总是相同的固定大小并不是很好,并且在处理可变长度的列表时使用数组很不方便。收藏品正是为这种东西而制作的。无需跟踪数组中的固定长度和当前索引,使用集合,您可以Add在需要添加新项目时简单地调用该方法。

所以,我的建议是更像这样:

Public Function GetBookingData(bookingDate As Date) As List(Of Integer)
    Dim data As New List(Of Integer)()
    Using connection As New MySqlConnection()
        connection.ConnectionString = connectionString
        connection.Open()
        Dim query As String = "SELECT * FROM bookings WHERE Date = @BookingDate"
        Using command As New MySqlCommand(query, connection)
            Dim parameter As IDbDataParameter = command.CreateParameter()
            parameter.ParameterName = "@BookingDate"
            parameter.Value = bookingDate
            command.Parameters.Add(parameter)                
            Using reader As DbDataReader = cmd.ExecuteReader()
                Do While reader.Read()
                    data.Add(reader.GetInt16(1))
                Loop
            End Using
        End Using
    End Using
    Return data
End Function
于 2013-02-18T14:47:06.617 回答