VB数据集问题

时间:2010-01-07 05:56:38

标签: visual-studio-2005 dataset

我们的想法是创建一个消息框,在发送消息时将我的用户名,消息和发布日期时间存储到数据库中。

很快就意识到,如果用户更改了他的名字怎么办?

所以我决定使用用户ID(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 :(得分:0)

将cmd和cmd2结合使用会更高效,这样cmd就会变为
SELECT msg.*,mem.Name FROM Message msg INNER JOIN Member mem ON msg.icn = mem.icn

这样,您的Member.name将与Messages表位于同一数据集中,使您的代码更加清晰。

-Joel

相关问题