我在包含属性cust_id的数据库中有Membership和Bookings表,它是Membership中的主键和Bookings中的引用键。当我执行数据读取器时,我希望它从membership表中读取bookings值,但它是从cust_id表中读取的。
此外,当我比较两个cust_id值时,一个取自文本框,另一个取自数据库列,尽管两者相同,但比较结果为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()发布于 2011-09-09 11:16:29
试着显式地声明你需要一个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)发布于 2011-09-11 15:21:16
至于字符串比较:我总是使用Datareader.GetString(item),如下所示:
If IsDBNull(Dr.Item(nr)) Then
Return ""
Else
Return Dr.GetString(nr).TrimEnd
End If其中nr标识要从中提取值的行。您正在使用某种默认方法将数据库值转换为程序变量。我宁愿写我想写的东西。
https://stackoverflow.com/questions/7356709
复制相似问题