Сборка SQL CLR: Получить Bytestream? - PullRequest
14 голосов
/ 22 мая 2010

У меня есть SQL CLR dll, который я хочу развернуть, но обнаружил, что вы можете встроить битовый поток / varbinary_literal / varbinary_expression / Assembly биты в текстовый файл, чтобы обойти беспорядочную сложность упаковки DLL и обеспечения ее доступности для команда CREATE ASSEMBLY .

Но что мне еще предстоит найти, так это как получить значение потока байтов / varbinary_literal / varbinary_expression / assembly бит. Я не нашел какой-либо непротиворечивой терминологии, и что я продолжаю находить, используя Load().

Ответы [ 2 ]

19 голосов
/ 22 мая 2010

Это просто шестнадцатеричное представление dll. Этот бит должен сделать трюк:

    static string GetHexString(string assemblyPath)
    {
        if (!Path.IsPathRooted(assemblyPath))
            assemblyPath = Path.Combine(Environment.CurrentDirectory, assemblyPath);

        StringBuilder builder = new StringBuilder();
        builder.Append("0x");

        using (FileStream stream = new FileStream(assemblyPath,
              FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            int currentByte = stream.ReadByte();
            while (currentByte > -1)
            {
                builder.Append(currentByte.ToString("X2", CultureInfo.InvariantCulture));
                currentByte = stream.ReadByte();
            }
        }

        return builder.ToString();
    }

Вы должны использовать полученную строку следующим образом:

string hexString = GetHexString(assemblyPath);
string sql = "CREATE ASSEMBLY [" + assemblyName + "] FROM " + hexString + 
             " WITH PERMISSION_SET = " + somePermissionSet;
5 голосов
/ 01 апреля 2016

Найдено здесь , varbinary можно создать без специального кода для его создания, только с помощью SQL Server Management Studio (SSMS) и локального экземпляра SQL Server.

  1. create или alter вашей сборки в базе данных с использованием ее локального пути на локальном сервере SQL.

    use yourBase
    go
    create assembly YourAssemblySqlName from N'YourLocalPath\YourAssemblyFile.dll'
    go
    
  2. Найдите сборку в обозревателе объектов.

    Browsing to assembly

  3. Сценарий его создания.

    Scripting the assembly

И SSMS дает вам varbinary.

...