Datareader Получение данных - PullRequest
       2

Datareader Получение данных

0 голосов
/ 09 сентября 2011

У меня есть таблицы Членств и Бронирований в базе данных, содержащие атрибут cust_id, который является первичным ключом в Членстве и ссылочным ключом в Бронировании. Когда я выполняю программу чтения данных, я хочу, чтобы она считывала значения cust_id из таблицы членства, но читает из таблицы резервирования.

Кроме того, когда я сравниваю два значения cust_id, одно из которых взято из текстового поля, а другое - из столбца базы данных, хотя оба они совпадают, но результат сравнения ложен. Я сравнил с использованием 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 голосов
/ 11 сентября 2011

Что касается сравнения строк: я всегда использую Datareader.GetString (item), как в этом Sub:

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

где nr указывает строку для извлечения значения. Вы используете какой-то метод по умолчанию для преобразования значения базы данных в программную переменную. Я лучше пишу то, что хочу.

0 голосов
/ 09 сентября 2011

Попробуйте явно указать, что вы хотите вместо 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)
...