2013-05-29 53 views
0

我有一個函數,其唯一目的是當按鈕被按下並且被多次調用時獲取一些數據。這是函數代碼:當數據不存在時嘗試讀取無效錯誤

Function GetData2(ByVal clientNo As Integer) As List(Of SocioInfo) 


    Dim theResults2 = New List(Of SocioInfo) 
    Dim connStr = "Data Source=localhost;Initial Catalog=testdb;Integrated Security=True;MultipleActiveResultSets=true" 


    Using conn = New SqlConnection(connStr) 

     Dim sql = "SELECT [FirstName], [LastName] FROM [CustInfo] Where ([NumCuenta] = @SocioNum)" 
     Dim sql2 = "SELECT [AcctName], [AcctNum], [NewAcct], [Balance] From [ACCT_NEW] Where ([AcctNum] = @SocioNum)" 
     Dim sqlCmd = New SqlCommand(sql, conn) 
     Dim sqlCmd2 = New SqlCommand(sql2, conn) 
     sqlCmd.Parameters.AddWithValue("@SocioNum", CDbl(txtInput.Text)) 
     sqlCmd2.Parameters.AddWithValue("@SocioNum", CDbl(txtInput.Text)) 



     conn.Open() 

     Dim rdr = sqlCmd.ExecuteReader 
     Dim rdr2 = sqlCmd2.ExecuteReader 

     While rdr.Read 
      theResults2.Add(New SocioInfo With { 
          .Nombre = rdr.GetString(0), 
          .LastName = rdr.GetString(1) 
}) 

     End While 
     While rdr2.Read 
      theResults2.Add(New SocioInfo With { 
             .CuentaName = rdr.GetString(0), 
              .AcctNum = rdr.GetValue(1), 
              .AcctFull = rdr2.GetValue(2), 
             .Balance = rdr2.GetValue(3) 
         }) 


     End While 

    End Using 

    Return theResults2 

End Function 

我不是100%肯定,如果這是要做到這一點(基本上需要從兩個不同的表中獲取數據)的最佳方式。事情是,而Rdr顯示我沒有錯誤,Rdr2只是在臉上吹。例外情況是這樣的:

Invalid attempt to read when no data is present. 

回答

2

在你試圖使用第一SqlDataReader的第二循環,但,這是不可能的,因爲第一循環已經達到了輸入數據的末尾。

如果您需要在兩個表之間加入數據,更好的方法是使用JOIN運算符只使用一個查詢。此查詢的工作假設在CustInfo表中的每個客戶有一個帳戶在ACCT_NEW表

Dim sql = "SELECT c.FirstName, c.LastName, a.AcctName, a.AcctNum, a.NewAcct, a.Balance " & _ 
      "FROM CustInfo c INNER JOIN ACCT_NEW a ON a.AcctNum = c.NumCuenta " & _ 
      "WHERE NumCuenta = @SocioNum " 


Using conn = New SqlConnection(connStr) 

    Dim sqlCmd = New SqlCommand(sql, conn) 
    sqlCmd.Parameters.AddWithValue("@SocioNum", CDbl(txtInput.Text)) 
    conn.Open() 
    Dim rdr = sqlCmd.ExecuteReader 

    While rdr.Read 
     theResults2.Add(New SocioInfo 
     With { 
         .Nombre = rdr.GetString(0), 
         .LastName = rdr.GetString(1) 
         .CuentaName = rdr.GetString(2), 
         .AcctNum = rdr.GetValue(3), 
         .AcctFull = rdr.GetValue(4), 
         .Balance = rdr.GetValue(5) 

     }) 
    End While 

末使用

+0

*捂臉*我剛看到它。這樣一個容易發現的問題...我向上帝發誓我在發帖之前看了5次。 Geesh。我現在確實有一個有趣的問題...我按下「搜索」按鈕,但程序只是有點手。沒有VB例外。 –

+0

我對SQL很謹慎;我害怕它哈哈。這就是爲什麼我沒有去Inner Inner。你的回覆是完美的史蒂夫,感謝一百萬。 –

相關問題