0

データベースからデータを取り込む辞書がいくつかあります。これはデータベースのサンプルです。DB のすべてのフィールドは文字列として表されます。

PromoStatus         3   Paid
PromoStatus         4   Escrowed
TickTransCode   &H0 Valid cashable ticket
TickTransCode   &H1 Valid restricted promo ticket
TickTransCode   &H2 Valid nonrestricted promo ticket
BIllDenom           0   1
BIllDenom           1   2

ここに私が持っているコードがあります

Public Shared TickTransCode As New Dictionary(Of Byte, String)()
Public Shared BIllDenom As New Dictionary(Of Byte, Decimal)()
Public Shared PromoStatus As New Dictionary(Of Byte, String)()    
Dim myReader As SqlDataReader = Nothing
Dim myCommand As New SqlCommand("select * from dictionary", myConnection)
myReader = myCommand.ExecuteReader()
While myReader.Read()
    Select Case myReader.GetString(2)
        Case "PromoStatus"
           PromoStatus.Add(Convert.ToByte(myReader.GetString(3)), myReader.GetString(4))
        Case "BillDenom"
           BIllDenom.Add(Convert.ToByte(myReader.GetString(3)), Convert.ToByte(myReader.GetString(4)))
        Case "TickTransCode"
           TickTransCode.Add((myReader.GetString(3)), myReader.GetString(4))
     End Select
End While

最初のケースは正常に動作します 3 ケース 適切な変換がわからないため、&HA は実際には 10 である必要があります &HF は 15 などです。DB に実際の数値を入れない理由を尋ねるかもしれませんが、16 進数は私が取得したものですドキュメントが使用する通信ストリームと番号なので、データの問題をトラブルシューティングするときにすべての番号を変換する必要はありません。

ここに私が得るエラーがあります

Input string was not in a correct format

また、データベースから辞書を作成するためのより良い方法があります。このサンプルよりもはるかに多くの辞書があり、それぞれにテーブルが必要です。DB を使用する理由は、再コンパイルせずに辞書に追加できるようにするためです。

4

2 に答える 2

0

あなたのSQLでは、次のことができます:

SELECT CAST(SUBSTRING(HexNumber, 2, 9999) AS INT)

またはVB側で:

Dim tInt As Int32 = Int32.Parse(hexString, System.Globalization.NumberStyles.HexNumber)
于 2012-09-11T17:18:30.787 に答える
0

NumberStyles.HexNumber では、"&h" または "&H" は使用できません。ただし、それらは簡単に削除できます。

Dim s = "&h1A"
s = s.Replace("&H", "").Replace("&h", "")
Dim n = Integer.Parse(s, Globalization.NumberStyles.HexNumber)
Console.WriteLine(n.ToString)
于 2012-09-11T18:03:52.353 に答える