我们使用c#和BinaryFormatter使用varBinary类型在数据库中存储字符串值。我们转换为字节数组然后保存到DataBase
public static byte[] ToBytes(stringvalue)
{
if (value == null)
return null;
byte[] inMemoryBytes;
using (MemoryStream inMemoryData = new MemoryStream())
{
new BinaryFormatter().Serialize(inMemoryData, value);
inMemoryBytes = inMemoryData.ToArray();
}
return inMemoryBytes;
}
好的,所以如果我们保存char“a”,我们可以在数据库中看到“0x0001000000FFFFFFFF0100000000000000060100000001610B”。我们可以检索数据并再次转换为字符串。
我们是否可以仅使用transact SQL将此二进制值(“0x0001000000FFFFFFFF0100000000000000060100000001610B”)转换为char(“a”)(因此我们可以从sql server控制台进行修改,插入和比较)?
非常感谢。
答案 0 :(得分:2)
你可以使用更简单的东西,如
Encoding.Default.GetBytes("a");
这将返回“61”并且可以更容易地转换为varchar,只需运行此:
create table #sample (content varbinary(max));
insert into #sample values (0x61)
select cast(content as varchar) from #sample
答案 1 :(得分:2)
我建议使用http://msdn.microsoft.com/en-us/magazine/cc163473.aspx描述的方法来使用.NET正则表达式库。特别是CLR用户定义函数的部分。您可以简单地使用BinaryFormatter来反序列化您的字节数组。
[SqlFunction]
public static string ToStringFromBytes(byte[] value)
{ if (value == null) return null;
using (MemoryStream inMemoryData = new MemoryStream(value))
{
return new BinaryFormatter().Deserialize(inMemoryData) as string;
}
}
答案 2 :(得分:0)
为什么不能将原始字符串存储在nvarchar(MAX)
类型列中?
如果必须使用varbinary
类型列,那么至少使用System.Text.Encoding
类进行转换 - 然后你也可以解码sql中的字符串:
public static byte[] ToBytes(string value)
{
if (value == null) return null;
return System.Text.Encoding.Unicode.GetBytes(value);
}
然后像这样使用它:
select cast(VarBinaryField as nvarchar(max)) from SomeTable