суббота, 23 января 2010 г.

MS SQL Server CREATE ASSEMBLY

В MS SQL Server'е есть такая интересная функция, когда можно написать функцию на С# или другом CLR языке, и выполнять её как обычную SQL функцию. Нам это в своё время помогло улучшить производительность одного момента.
Есть интересная штука связаная с ней. CREATE ASSEMBLY FROM деректива позваляет загрузить набор таких функции на C# в SQL сервер из dll. Т.е. после FROM следует абсалютный путь к dll с этими функциями. Но у нас возникла загвоздка с тем что скрипт установки базы запускаеться на боксе приложения, а база находиться на другой машине, соответственно sql server не может получить доступ к этой dll. Вообщем самый рабочий и оригиналльный способ придумали наши товарищи из поднебесной, после FROM они вставляют непосредственно бинарный код dll. Вообщем отжиг ещё тот, но лучше и надёжнее ничего лично я придумать не смог. А вот тут CREATE ASSEMBLY using assembly binary есть код на с#, как dll побыстрому преобразовать в такую вот бинарную строку.
  1. public string GetAssemblyBits(string assemblyPath)  
  2. {  
  3.       StringBuilder builder = new StringBuilder();  
  4.       builder.Append("0x");  
  5.    
  6.       using (FileStream stream = new FileStream(assemblyPath,  
  7.             FileMode.Open, FileAccess.Read, FileShare.Read))  
  8.       {  
  9.             int currentByte = stream.ReadByte();  
  10.             while (currentByte > -1)  
  11.             {  
  12.                   builder.Append(currentByte.ToString("X2", CultureInfo.InvariantCulture));  
  13.                   currentByte = stream.ReadByte();  
  14.             }  
  15.       }  
  16.    
  17.       return builder.ToString();  
  18. }  

1 комментарий: