2016-02-05 50 views
0

我有一個類型位列(60)的MySQL數據庫(5.6社區)。該字段包含值,如1001,0011等。我試圖通過vb.net適配器將「1010」字符串傳遞給數據庫。如果使用常規查詢它應該是這樣的:如何獲取system.byte到MySQL位類型?

insert into my_table (my_bit_field) values (b'1010'); 

這工作,並準確地插入如圖所示的字符串,但我需要使用數據適配器,所以我不能直接發送查詢。

在vb.net中使用數據適配器時,我收到一個錯誤消息,說它需要一個字節數組。所以我試圖用:

System.Text.Encoding.ASCII.GetBytes("1010") 

,但它只是把它轉換成字節的ASCII碼錶示(49,48,49,48)。

有沒有更好的方式來通過數據適配器,有沒有辦法做到這一點?

謝謝。

+0

你如何在代碼中存儲值?該文章使用文字(各種) – Plutonix

+0

在字符串中,文字「1010」存儲爲:Dim bit_code as string =「1010」。我只是想在這個例子中展示它的真實價值。 – user2721815

+0

'(b'1010')'是一個強制轉換,但MySQL將它保存爲'10'。如果你查詢它,你可以重新獲得它。淨沒有一點數據類型,字節是最小的,但*字符串*是一個不好的起點......它甚至不是數字。這代表什麼? – Plutonix

回答

0

在這種情況下,你可以嘗試以下操作將字符串轉換爲字節數組:

Dim bytes() As Byte = { Convert.ToByte("1010", 2) } 

然而,打破一旦你在你的字符串超過8位。你可以(或許應該)將字符串分成字節大小的部分並將每個字節轉換爲一個字節,例如​​3210。既然你有一個bit(60)列,你也可以騙一點,並使用類似這樣:

Dim inputValue As String = "000100000010000000110000010000000101000001100000011100001000" 
If inputValue.Length > 60 Then ' up to 64 could be supported 
    ' Error 
End If 
Dim longValue As ULong = Convert.ToUInt64(inputValue, 2) 
Dim bytes() As Byte = BitConverter.GetBytes(longValue) 
If BitConverter.IsLittleEndian Then 
    Array.Reverse(bytes) 
End If 

這會給你的字節數組,你可以在沒有顯示你的數據適配器代碼可能使用。

相關問題