Проблема с набором данных VB - PullRequest
0 голосов
/ 07 января 2010

Идея состояла в том, чтобы создать окно сообщения, в котором будут храниться мое имя пользователя, сообщение и дата и время публикации в базе данных при отправке сообщений.

Вскоре пришло осознание, что если пользователь поменяет свое имя?

Поэтому я решил использовать идентификатор пользователя (icn) для идентификации постера сообщения. Тем не менее, мой кусок кода продолжает давать мне ту же ошибку. Говорит, что в наборе данных нет строк ds2.

Я попробовал свой запрос на моем SQL, и он отлично работает, поэтому мне действительно нужна помощь, чтобы найти ошибку в моей части кода здесь.


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim name As String
        Dim icn As String
        Dim message As String
        Dim time As String
        Dim tags As String = ""

        Dim strConn As System.Configuration.ConnectionStringSettings
        strConn = ConfigurationManager.ConnectionStrings("ufadb")

        Dim conn As SqlConnection = New SqlConnection(strConn.ToString())
        Dim cmd As New SqlCommand("Select * From Message", conn)

        Dim daMessages As SqlDataAdapter = New SqlDataAdapter(cmd)
        Dim ds As New DataSet

        cmd.Connection.Open()
        daMessages.Fill(ds, "Messages")
        cmd.Connection.Close()

        If ds.Tables("Messages").Rows.Count > 0 Then
            Dim n As Integer = ds.Tables("Messages").Rows.Count
            Dim i As Integer
            For i = 0 To n - 1
                icn = ds.Tables("Messages").Rows(i).Item("icn")
                Dim cmd2 As New SqlCommand("SELECT name FROM Member inner join Message ON Member.icn = Message.icn WHERE message.icn = @icn", conn)
                cmd2.Parameters.AddWithValue("@icn", icn)
                Dim daName As SqlDataAdapter = New SqlDataAdapter(cmd2)
                Dim ds2 As New DataSet
                cmd2.Connection.Open()
                daName.Fill(ds2, "PosterName")
                cmd2.Connection.Close()
                name = ds2.Tables("PosterName").Rows(0).Item("name")
                message = ds.Tables("Messages").Rows(i).Item("message")
                time = ds.Tables("Messages").Rows(i).Item("timePosted")
                tags = time + vbCrLf + name + ": " + vbCrLf + message + vbCrLf + tags
            Next
            txtBoard.Text = tags
        Else
            txtBoard.Text = "nothing to display"
        End If
    End Sub

1 Ответ

0 голосов
/ 07 января 2010

Было бы эффективнее объединить и cmd, и cmd2 так, чтобы cmd стал
SELECT msg.*,mem.Name FROM Message msg INNER JOIN Member mem ON msg.icn = mem.icn?

Таким образом, ваш Member.name будет находиться в том же наборе данных, что и таблица «Сообщения», что сделает ваш код намного чище.

-Joel

...