2010-05-21 28 views
13

Tengo un SQL CLR dll que quiero implementar, pero he encontrado que puede incrustar los bits byte stream/varbinary_literal/varbinary_expression/assembly en un archivo de texto para evitar la complicada tarea de empaquetar un archivo DLL y asegurarse de que esté accesible para el CREATE ASSEMBLY command.CLR SQL Assembly: Obtenga el Bytestream?

Pero lo que todavía tengo que encontrar es cómo obtener ese valor de bytes/varbinary_literal/varbinary_expression/conjunto de bytes de bytes de bytes. No he encontrado ninguna terminología consistente, y lo que sigo encontrando al usar Load().

¿Ayuda?

Respuesta

17

Es solo una representación hexadecimal de la dll. Este bit debe hacer el truco:

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(); 
    } 

Se debe utilizar la cadena resultante de este modo:

string hexString = GetHexString(assemblyPath); 
string sql = "CREATE ASSEMBLY [" + assemblyName + "] FROM " + hexString + 
      " WITH PERMISSION_SET = " + somePermissionSet; 
+2

Gracias - la información hexadecimal me llevó a este código: http://blog.waldenl.com/2009/12/command-line-hex-representation-of-file.html –

+0

que es básicamente el mismo ciclo sí :) –

4

encontrado here, la varbinary se pueden generar sin código personalizado para generarla, sólo mediante el uso del servidor SQL Management Studio (SSMS) y una instancia local de SQL Server.

  1. create o alter su ensamblaje en su base de datos utilizando la ruta local de su servidor SQL Server local.

    use yourBase 
    go 
    create assembly YourAssemblySqlName from N'YourLocalPath\YourAssemblyFile.dll' 
    go 
    
  2. Busque su ensamblaje en el Explorador de objetos.

    Browsing to assembly

  3. Guión su creación.

    Scripting the assembly

Y SSMS le dan la varbinary.

+2

también puede obtener de esta manera: ' af.content SELECT sys.assemblies un INNER JOIN sys.assembly_files AF ON = a.assembly_id af.assembly_id DONDE a.name = <@assemblyName>' –