2013-04-21 2 views
1

Простите, что я спрашиваю, я застрял там, где мой if else и select case statement будет только перейти к опции ELSE. Ниже мой кодВыбор случая не работает При извлечении данных с сервера sql

lblStudentName.Text = CStr(studentInfo.stuFullName) 
lblStudentBirthCert.Text = CStr(studentInfo.birthCert) 

Dim conn As New SqlConnection 
Dim cmd As New SqlCommand 

conn.ConnectionString = ("server = A-PC\SQLEXPRESS;database=studentManagement;integrated security=true") 
conn.Open() 

cmd.Connection = conn 
cmd.Parameters.AddWithValue("@id", lblStudentBirthCert.Text) 
cmd.CommandText = ("SELECT paymentType From payment Where [email protected]") 

Dim reader As SqlDataReader = cmd.ExecuteReader() 
Dim tempPaymentType As String 

While reader.Read() 
    Dim tempPaymentType = reader.GetString(0) 
    Select Case tempPaymentType 
     Case "a" 
      txtFeeA.Text = tempPaymentType 
     Case "b" 
      txtFeeB.Text = tempPaymentType 
     Case "c" 
      txtFeeC.Text = tempPaymentType 
     Case "d" 
      txtFeeD.Text = tempPaymentType 
     Case "e" 
      txtFeeE.Text = tempPaymentType 
     Case Else 
      txtFeeF.Text = tempPaymentType 
    End Select 
End While 
reader.Close() 

По какой-то причине, он будет идти только еще и распечатать его в txtFeeF.text. Запрос вернет 6 результат btw, a в f. То же самое с выражением if else. Без каких-либо команд else и select выход будет f, который является последним в считывателе. Любая помощь очень ценится.

If tempPaymentType.Equals("a") Then 
      txtFeeA.Text = tempPaymentType.ToString 
     End If 
+0

Попробуйте добавить Trim(). ToLower() после GetString (0), чтобы увидеть, есть ли вопрос или дополнительные пробелы – Sparky

+0

Спасибо, ваш метод работает, кажется, что база данных добавляет в него пробелы. после обрезки он работает сейчас. Хотя я не уверен, как отметить комментарий в качестве ответа? –

+0

@SalehinSuhaimi - Вы не можете отмечать комментарии как ответ. Вы можете попросить Спарки опубликовать свой комментарий в качестве ответа, который затем вы можете принять. Что касается того, почему существуют дополнительные пробелы, может быть ряд причин. Столбец, представляющий собой CHAR (2) или больше, приходит на ум. – Tim

ответ

2

Try Добавление

Trim().ToLower() 

после

GetString(0) 

, чтобы увидеть, если есть случай, вопрос или лишние пробелы. Если поле базы данных является полем символов, оно добавит дополнительные пробелы, но если VARCHAR(), он должен обрезать его.

+0

Nitpick: 'varchar' не обрезает, он просто не добавляет * пробелов. Если вы установите его в 'a' явно, вы получите 'a', а не 'a'. Просто '' 'всегда будет храниться как' '' в 'char (2)'. – Luaan

2

Добавить строку для отладки:

Dim tempPaymentType = reader.GetString(0) 
    Debug.Print (String.Format("tempPaymentType: {0}", tempPaymentType)) 
    Select Case tempPaymentType 

Там может быть много причин, но вы не дали достаточно информации. Например, буквы разных случаев? («А» против «А»)

Это может помочь изменить этот код:

Dim tempPaymentType As String 

While reader.Read() 
    tempPaymentType = reader.GetString(0) 

Я удивлен, что он даже строит с дополнительным Dim заявления.

+0

Да. Просто отлаживайте это! Узнайте, что такое ценность и почему это неправильно. – usr

+0

Подождите, попробуйте и обновите его здесь. –

+0

tempPaymentType: a tempPaymentType: b это то, что я получил, а -f всегда будет в маленькой букве, так как это необязательный выбор, он исправлен в базе данных. –