SQL二进制转换与.Net二进制转换

| 我在MS SQL Server中有一个这样的表:
CREATE TABLE Setting
(
   ID int NOT NULL,
   Value varbinary(MAX) NOT NULL
)
“值”列中的信息可以设置为字符串,布尔值,整数,十进制等格式。例如:
INSERT INTO Setting (Value) VALUES (CONVERT(VARBINARY(MAX), 5.4))
要选择数据,我可以在将数据返回到.Net之前转换值,但是我更喜欢选择过程返回二进制数据,然后在.Net中执行正确的类型转换。这样,我将能够同时选择以不同格式存储的多个设置。 我无法弄清楚的是如何将返回的二进制数据转换为正确的类型(尤其是整数和十进制)。数据库以字节数组(byte [])返回二进制数据,但是似乎不支持从字节数组到整数或十进制的转换。 我的初衷是使用System.Convert,但它不支持字节数组。 我的第二个解决方案是使用System.IO.BinaryWriter和System.IO.BinaryReader。此方法给了我这个错误:\“无法读取超出流的末尾。\” 例:
cmd.CommandText = \"SELECT CONVERT(VARBINARY(MAX), 2.3)\";
byte[] bytes = (byte[])ExecuteSelect(cmd).Rows[0][0];
System.IO.MemoryStream ms = new System.IO.MemoryStream();
System.IO.BinaryWriter br = new System.IO.BinaryWriter(ms);
br.Write(bytes);
System.IO.BinaryReader br2 = new System.IO.BinaryReader(ms);
decimal d = br2.ReadDecimal();
我的第三次尝试是使用System.Runtime.Serialization.Formatters.Binary.BinaryFormatter,但这将返回错误消息:“解析完成之前遇到流的末尾。” 例:
cmd.CommandText = \"SELECT CONVERT(VARBINARY(MAX), 2.3)\";
byte[] bytes = (byte[])ExecuteSelect(cmd).Rows[0][0];
System.IO.MemoryStream ms = new System.IO.MemoryStream();
ms.Write(bytes, 0, bytes.Length);
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
decimal d = (decimal)bf.Deserialize(ms);
我当前的解决方案是将值的类型传递到存储过程中,并使用case语句将值转换为字符串。 我的首选解决方案是,如果不连接数据库就可以从.Net访问MS SQL \的Convert函数。 我不想使用本地函数进行转换。我需要一个可靠的解决方案。 我的环境是.Net 2008,C#或VB 任何想法将不胜感激。     
已邀请:
        您的第一次尝试是接近,有
BitConverter.ToDouble
或任何您想要将其转换为的东西。 您的第二次尝试也已经结束,您只是在读取流之前不倒带(这是一种疯狂的回旋方式...)。 至于您的第三次尝试,您仍然没有学到有关I / O的课程。 编辑:我不相信你从那东西得到小数。您应该仔细检查您的类型...     

要回复问题请先登录注册