2010-01-07 85 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