2010-01-07 80 views
0

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

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

因此,我决定使用用户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 

回答

0

难道是更有效的双方cmd并结合CMD2,这样CMD成为
SELECT msg.*,mem.Name FROM Message msg INNER JOIN Member mem ON msg.icn = mem.icn

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

-Joel