2010-05-21 52 views
13

我有一個我想部署的SQL CLR DLL,但發現你可以將字節流/ varbinary_literal/varbinary_expression/assembly位嵌入到文本文件中,以解決打包DLL的麻煩問題,並確保它可以訪問CREATE ASSEMBLY commandCLR SQL程序集:獲取Bytestream?

但是我還沒有找到的是如何獲取該字節流/ varbinary_literal/varbinary_expression/assembly bits值。我還沒有找到任何一致的術語,以及我在使用Load()時發現的內容。

幫助?

回答

17

這只是一個DLL的十六進制表示。只有通過使用SQL Server

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

謝謝 - 十六進制信息導致我到這個代碼:http://blog.waldenl.com/2009/12/command-line-hex-representation-of-file.html – 2010-05-22 22:16:13

+0

這基本上是相同的循環是:) – 2010-05-29 21:21:28

4

發現here,無需自定義代碼生成生成它的varbinary:該位應該做的伎倆:

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

您應該使用生成的字符串,像這樣Management Studio(SSMS)和本地SQL Server實例。

  1. createalter您的組件數據庫中使用本地SQL Server上的本地路徑。

    use yourBase 
    go 
    create assembly YourAssemblySqlName from N'YourLocalPath\YourAssemblyFile.dll' 
    go 
    
  2. 在對象資源管理器中瀏覽至您的程序集。

    Browsing to assembly

  3. 腳本它的創作。

    Scripting the assembly

而且SSMS給你varbinary

+2

你也可以像這樣得到它: 'SELECT af.content FROM sys.assemblies a INNER JOIN sys.assembly_files af ON a.assembly_id = af.assembly_id WHERE a.name = <@assemblyName> – 2016-11-28 16:21:59

相關問題