Преобразуйте Массив байтов для строкового представления Transact-SQL использования

Мы - строковые значения хранилища в базе данных с помощью varBinary тип с помощью c# и BinaryFormatter. Мы преобразовываем в массив байтов, и затем мы сохраняем к 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;
}

Хорошо, Поэтому если мы сохраняем символ "a", мы видим "0x0001000000FFFFFFFF0100000000000000060100000001610B" в базе данных. После того, как мы можем получить данные и преобразовать снова для строкового представления.
Мы можем преобразовать это двоичное значение ("0x0001000000FFFFFFFF0100000000000000060100000001610B") для обугливания ("a") только с помощью проводят SQL (таким образом, мы можем сделать модификации, вставляет, comparations от консоли SQL-сервера)?

Большое спасибо.

6
задан MartW 25 January 2010 в 13:21
поделиться

3 ответа

Вы могли бы использовать что-то проще, как

Encoding.Default.GetBytes("a");

, который вернется «61» и может быть более легко переведен в варрач, просто работает следующее:

create table #sample (content varbinary(max));
insert into  #sample values (0x61)
select cast(content as varchar) from #sample
3
ответ дан 17 December 2019 в 04:46
поделиться

Почему вы не можете просто хранить оригинальную строку в Nvarchar (Max) Тип в столбце? Если вам необходимо использовать VARBINADY столбец типа , то, по крайней мере, используйте классы 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
0
ответ дан 17 December 2019 в 04:46
поделиться

Я предлагаю использовать описанные метод http://msdn.microsoft.com/en-us/magazine/cc163473.aspx для использования библиотеки .NET Regex. В частности, раздел для пользовательских функций CLR. Вы можете просто использовать бинарформисно для десериализации байтового массива.

[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
ответ дан 17 December 2019 в 04:46
поделиться