2016-02-05 74 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 

这会给你的字节数组,你可以在没有显示你的数据适配器代码可能使用。

相关问题