2014-10-28 87 views
0

我有一個在SQL Server Express 2012數據庫的CRUD操作中密集的程序。我希望創建一個包含大部分代碼的CLR程序集,然後將其附加到數據庫,以便它保留在服務器上。我希望在特定的表中的每一行上執行資源密集型計算,然後將該計算的結果輸入到該表中的一列(不參與計算本身)。我希望它保留在服務器上,這樣服務器就可以自動進行計算,而無需前端應用程序調用它,並且不需要應用程序必須從服務器來回提交TSQL。我也想用Entity Framework在VB.NET中編寫代碼,以使事情更輕鬆。將實體框架CLR DLL添加到SQL Server數據庫

在我編寫真正的程序之前,我決定嘗試使用AdventureWorks2012的這種方法。我在Visual Studio中創建了一個類庫,然後以發佈模式構建。然後我進入SQL Server Management Studio,右鍵單擊Databases> AdventureWorks2012> Programmability> Assemblies節點,然後單擊「New Assembly ...」,導航到我的內置DLL並單擊確定,但是SQL Server Management Studio爲我提供了這個錯誤信息:

TITLE: Microsoft SQL Server Management Studio 
------------------------------ 

Create failed for SqlAssembly 'AdventureWorks_01'. (Microsoft.SqlServer.Smo) 

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=11.0.5058.0+((SQL11_PCU_Main).140514-1820+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Create+SqlAssembly&LinkId=20476 

------------------------------ 
ADDITIONAL INFORMATION: 

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo) 

------------------------------ 

Assembly 'entityframework, version=6.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089.' was not found in the SQL catalog. (Microsoft SQL Server, Error: 6503) 

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=11.00.5058&EvtSrc=MSSQLServer&EvtID=6503&LinkId=20476 

------------------------------ 

我注意到,這要求一個entityframework裝配,並有一個build文件夾,所以我試圖用同樣的方法添加它,但我收到此錯誤信息:

TITLE: Microsoft SQL Server Management Studio 
------------------------------ 

Create failed for SqlAssembly 'EntityFramework'. (Microsoft.SqlServer.Smo) 

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=11.0.5058.0+((SQL11_PCU_Main).140514-1820+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Create+SqlAssembly&LinkId=20476 

------------------------------ 
ADDITIONAL INFORMATION: 

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo) 

------------------------------ 

Assembly 'system.runtime.serialization, version=4.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089.' was not found in the SQL catalog. 
Warning: The Microsoft .NET Framework assembly 'entityframework, version=6.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089, processorarchitecture=msil.' you are registering is not fully tested in the SQL Server hosted environment and is not supported. In the future, if you upgrade or service this assembly or the .NET Framework, your CLR integration routine may stop working. Please refer SQL Server Books Online for more details. (Microsoft SQL Server, Error: 6503) 

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=11.00.5058&EvtSrc=MSSQLServer&EvtID=6503&LinkId=20476 

------------------------------ 

我還在該文件夾中看到一個名爲EntityFramework.SqlServer.dll的DLL,所以我試圖添加它,但它產生了第一個錯誤 信息。

這裏是我的VB代碼:

Public Class Class1 
    Sub AddNewProduct() 
     Dim adWorks As New AdventureWorks2012Entities() 
     Dim myProduct = New Product() 

     With myProduct 
      'add applicable product info here 
     End With 

     adWorks.Products.Add(myProduct) 
    End Sub 
End Class 

有誰知道我該如何解決這個問題,或者如果我能在第一時間加入實體框架CLR組件到SQL Server數據庫?

+0

似乎一個奇怪的事情做一個部分,添加這些組件到SQL Server。你的程序會在服務器上運行嗎?試圖將這些程序集放到Sql Server中的原因是什麼? – 2014-10-28 13:36:54

+0

我希望做的是讓數據駐留在服務器上。根據這些數據,將對特定表格中的每一行執行資源密集型計算,然後將該計算結果輸入該表格中的一列(不涉及計算本身)。我希望這將留在服務器上,以便服務器可以自動進行計算,而無需前端應用程序調用它,並且不需要應用程序必須從服務器來回提交TSQL。 – 2014-10-29 21:06:04

+1

似乎更容易,也更合適,編寫一個控制檯應用程序或Windows服務,住在服務器上來做到這一點。 – 2015-03-20 04:52:50

回答

0

您需要加載鏈中的所有相關程序集,因爲某些程序集依賴於其他程序集。即System.Runtime.Serialization也需要加載t/b。此外MSDN對這個話題一整節希望這些鏈接將幫助:

(支持.NET Framework庫)
http://msdn.microsoft.com/en-us/library/ms403279.aspx
對於不支持的組件它還挺意味着SQL Server上沒有預裝組件只需添加他們通過在SSMS創建裝配(請參閱本MSDN文檔)或者你已經做

(CLR集成編程模型限制)
http://msdn.microsoft.com/en-us/library/ms403273.aspx

MSDN上你還可以看到調試SQL CLR代碼

+0

感謝您的輸入,@KVigor,但我仍然有問題(特別是'權限集')。你能給我一個演練嗎? – 2015-01-02 17:11:02

相關問題