我試圖創建一個程序集,但是我的遠程sql服務器無法訪問我的.dll文件。在遠程sql server上部署.dll?
create assembly BarcodeSql
from 'X:\test.dll'
WITH PERMISSION_SET = SAFE
我不知道如何把我的Test.dll的SQL Server上,但我知道我可以發送,而不是路徑的dll序列化DLL。我怎樣才能序列化的DLL?我似乎無法弄清楚。
我試圖創建一個程序集,但是我的遠程sql服務器無法訪問我的.dll文件。在遠程sql server上部署.dll?
create assembly BarcodeSql
from 'X:\test.dll'
WITH PERMISSION_SET = SAFE
我不知道如何把我的Test.dll的SQL Server上,但我知道我可以發送,而不是路徑的dll序列化DLL。我怎樣才能序列化的DLL?我似乎無法弄清楚。
我試圖創建一個裝配,但我的遠程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("-", "")
這將打印出一些大的十六進制值。然後,您可以在創建程序集時使用VARBINARY文字:
create assembly BarcodeSql
from 0x23456789
WITH PERMISSION_SET = SAFE
其中,0x123456789是PowerShell腳本的輸出。
這只是簡單的二進制表示。您可以使用任何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 }
如何從這裏創建一個過程?我的C#函數接受參數並返回一個值。 – sooprise 2012-07-09 18:17:02
@sooprise你可以使用'CREATE PROCEDURE .... AS EXTERNAL NAME assembly_name.class_name.method_name'。請參閱[MSDN文檔](http://msdn.microsoft.com/zh-cn/library/ms187926.aspx) – vcsjones 2012-07-09 18:33:08