2010-01-07 1 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를이
SELECT msg.*,mem.Name FROM Message msg INNER JOIN Member mem ON msg.icn = mem.icn가되도록, cmd를 CMD2 모두를 결합하는 것이 더 효율적이 될 것인가?

이렇게하면 Member.name이 메시지 테이블과 동일한 데이터 세트에 있으므로 코드가 훨씬 더 명확 해집니다.

- 조엘