Datareader检索数据

时间:2011-09-09 03:01:34

标签: sql-server vb.net sqldatareader

我在包含属性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()

2 个答案:

答案 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)

答案 1 :(得分:0)

至于字符串比较:我总是使用Datareader.GetString(item),如下所示:

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

其中nr标识要从中获取值的行。您正在使用一些默认方法将数据库值转换为程序变量。我宁愿写下我想要的东西。