2011-09-09 55 views
0

我在包含屬性cust_id的數據庫中擁有會員資格和預訂表,該屬性是會員資格中的主鍵和預訂中的參考鍵。當我執行數據讀取器時,我希望它從成員表中讀取cust_id值,但它正在從預訂表中讀取它。數據讀取器檢索數據

此外,當我比較兩個cust_id值時,1取自文本框,另一個取自數據庫列,即使兩者相同,但比較結果爲false。我使用string.equals(str1,str2)進行了比較,並且還比較了兩個直接使用if語句。但是,在這兩種情況下,即使字符串相同,結果也是如此。

我的查詢是:

str2 = "select Memberships.cust_id from Memberships, Bookings where Memberships.cust_id = Bookings.cust_id" 
Dim cmd2 As New SqlCommand(str2, con) 
con.Open() 

Dim bookchk As SqlDataReader = cmd2.ExecuteReader 
While bookchk.Read() 
Dim str1 As String = MskdTxtCustId.Text 
Dim str3 As String = bookchk("cust_id") 
MessageBox.Show(str1 & "," & str3 & String.Equals(str1, str3)) 

End While 
    bookchk.Close() 
    con.Close() 
+0

我加入表格的一個主要目的是,還有其他確認需要預訂表中的屬性,例如我必須檢查新的預訂是否與一些已經預訂的預訂重疊 –

+0

是否可以發佈您的表格定義在這裏? –

+0

我該怎麼做? –

回答

0

嘗試,明確指出你想要一個INNER JOIN代替:

str2 = "select m.cust_id from Memberships AS M " &_ 
     " INNER JOIN Bookings AS B ON B.cust_id = M.cust_id;" 

比較時,用String.Compare(),並確保你修剪空白,以防萬一。

Dim str1 As String = MskdTxtCustId.Text.Trim() 
Dim str3 As String = bookchk("cust_id").ToString().Trim() 

Dim compareResult As Integer = String.Compare(s1, s2) 
MessageBox.Show("compare str1: {0}, str3: {1}, result: {2}" , str1, str3, compareResult) 

compareResult = String.Compare(s1, s2, True) 
MessageBox.Show("Compare insensitive. result: {0}", compareResult) 
+0

Thnaks爲您提供幫助,比較問題正在解決,但查詢中的問題仍然存在,它仍然從Bookings表中讀取值,而不是從會員表讀取 –

+0

您不清楚'reading'是什麼意思。 100%從m表中取值,同時加入b表,確保每個cust_id都在兩個表中。如果你不想那樣,那就不要加入。 –

+0

我在會員表中有3個唯一的cust_id值,即csc-01,csc-02,csc-03和6預訂表中的預訂全部用於csc-01和csc-02,並且沒有爲csc-03預訂。 。當我從會員選擇iemcust_id那麼,因爲我已經使用消息框來檢查結果,在MessageBox.Show(str1&「,」&str3&String.Equals(str1,str3))str3永遠不會顯示一個值csc-03但它存在於會員表中...我希望bookchk遍歷M.cust_id中的所有值,以便每次檢查客戶是否具有會員資格時....我希望您現在瞭解了 –

0

作爲字符串比較:我總是使用Datareader.GetString(項)如本子:

If IsDBNull(Dr.Item(nr)) Then 
     Return "" 
    Else 
     Return Dr.GetString(nr).TrimEnd 
    End If 

其中NR標識行來從一個值。您正在使用某種默認方法將數據庫值轉換爲程序變量。我寧願寫我想要的東西。