2

アセンブリを作成しようとしていますが、リモート SQL サーバーが .dll ファイルにアクセスできません。

create assembly BarcodeSql 
from 'X:\test.dll' 
WITH PERMISSION_SET = SAFE

SQL サーバーに test.dll を配置する方法はわかりませんが、dll へのパスの代わりにシリアル化された dll を送信できることはわかっています。dll をシリアル化するにはどうすればよいですか? 私はそれを理解できないようです。

4

2 に答える 2

7

アセンブリを作成しようとしていますが、リモート SQL サーバーが .dll ファイルにアクセスできません。

X:\これは、SQL が実行されているサーバーではなく、SQL インスタンスが実行されているサーバーを探しているためです。

dll をシリアル化するにはどうすればよいですか?

CREATE ASSEMBLY でネットワーク パスを指定できます。

create assembly BarcodeSql 
from '\\yourmachine\sharetox\test.dll' 
WITH PERMISSION_SET = SAFE

または、実際にシリアル化することもできます。PowerShell の使用:

"0x" + [System.BitConverter]::ToString([System.IO.File]::ReadAllBytes("X:\text.dll")).Replace("-", "")

大きな16進値が出力されます。その後、アセンブリを作成するときに VARBINARY リテラルを使用できます。

create assembly BarcodeSql 
from 0x23456789
WITH PERMISSION_SET = SAFE

0x123456789 は、powershell スクリプトの出力です。

于 2012-07-09T18:05:57.667 に答える
1

単純なバイナリ表現です。任意のHEXエディター、または次のようなものを使用できます。

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

また、ネットワークパスからアセンブリをロードすることもできます。

CREATE ASSEMBLY assembly_name
[ AUTHORIZATION owner_name ]
FROM { <client_assembly_specifier> | <assembly_bits> [ ,...n ] }
[ WITH PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE } ]
[ ; ]
<client_assembly_specifier> :: =
        '[\\computer_name\]share_name\[path\]manifest_file_name'
  | '[local_path\]manifest_file_name'

<assembly_bits> :: =
{ varbinary_literal | varbinary_expression }
于 2012-07-09T18:02:13.693 に答える