Create DLL for SQL Server

I've created a class in VB.Net. Now I want to turn it into a class library, register it with SQL Server and call it from a stored procedure there. What are the steps?
TimHudspithAsked:
Who is Participating?
 
Eugene ZCommented:
what is your sql server version?

if fresh one use this step-by-step example

'The Hello World sample demonstrates the basic operations that are involved in creating, deploying, and testing a simple common language runtime (CLR) integration-based stored procedure.'

http://technet.microsoft.com/en-us/library/ff878250.aspx
0
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
here is the entry point for the CLR integration:
http://msdn.microsoft.com/en-us/library/ms254498%28v=vs.110%29.aspx

the actual installation of the assembly is described here:
http://msdn.microsoft.com/en-us/library/ms345099%28SQL.100%29.aspx

that should be all, so far. just do it on a dedicated test server first, just to make sure you can easily stop/restart the sql service, and replace the assembly file as needed.
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
TimHudspithAuthor Commented:
I tried to create the assembly in SQL Server (2008) but got the message:

'CREATE ASSEMBLY failed because the assembly is built for an unsupported version of the CLR runtime.'

The .dll was created in Visual Studio 2010.
0
 
Éric MoreauSenior .Net ConsultantCommented:
are you sure that you are targeting framework 3.5?

try creating a new test project like I explain in my article.
0
 
TimHudspithAuthor Commented:
I followed one of the earlier links to MSDN. I changed the compiler settings for the .dll to .Net 3.5 and tried again to create the assembly in SQL Server. It almost seemed to work but said that my class uses the System.Drawing namespace, which it doesn't recognise, so I need to load that, but I don't know how.

I also ran the code 'select * from sys.dm_clr_properties' and see that SQL Server 2008 uses .Net 2.0, so am wondering why setting my .dll to target framework 3.5 would work?
0
 
Éric MoreauSenior .Net ConsultantCommented:
Normally, .Net Framework 3.5 is installed on SQL 2008. Try to target 2.0 to test.
0
 
TimHudspithAuthor Commented:
Still the same.

Is there a way that I can get SQL Server to reference .Net 3.5, instead of 2.0?
And/or how can I load up the missing assembly (System.Drawing)?
0
 
Éric MoreauSenior .Net ConsultantCommented:
install it on the server
0
 
TimHudspithAuthor Commented:
System.Drawing assembly or .Net 3.5 as a whole?

Can you tell me how to do it?
0
 
Éric MoreauSenior .Net ConsultantCommented:
you cannot install part of it. check http://www.microsoft.com/en-us/download/details.aspx?id=21
0
 
TimHudspithAuthor Commented:
I don't need to download it. I already have .NET 4.0 on my machine, but SQLCLR is using the 2.0 framework. How do I get it to change?
0
 
Éric MoreauSenior .Net ConsultantCommented:
could it just be that you have different SP on your PC and on your server?

do you have SQL server installed locally so that you can fully try it first on your PC?
0
 
TimHudspithAuthor Commented:
I'm taking a different route, creating the DLL using the SQL CLR Project template as per your website, although I've hit a hurdle right at the start. When I get to add the database reference, it lists my server, but the dropdown list is empty, none of my databases is shown.
0
 
Éric MoreauSenior .Net ConsultantCommented:
do you have SQL server installed locally so that you can fully try it first on your PC?
0
 
TimHudspithAuthor Commented:
OK, ignore that. I just needed to add "\SQLexpress" to the server reference.
0
 
TimHudspithAuthor Commented:
Run into the same problem: the System.Drawing assembly is not a listed reference there either. Apparently it IS possible to load individual assemblies into SQL Server, as follows:

CREATE ASSEMBLY [System.Drawing] AUTHORIZATION dbo 
FROM 'C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Drawing.dll'
WITH PERMISSION_SET = UNSAFE

Open in new window

In this case I got the message that the owner must have UNSAFE ASSEMBLY permission and that the database must have the TRUSTWORTHY property on. I fixed the TRUSTWORTHY property, and am now trying to find out how to change the UNSAFE ASSEMBLY setting.
0
 
Éric MoreauSenior .Net ConsultantCommented:
sorry but I cannot help you on that topic
0
 
Eugene ZCommented:
see
PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
ALTER ASSEMBLY
http://technet.microsoft.com/en-us/library/ms186711(v=sql.100).aspx
0
 
TimHudspithAuthor Commented:
To set unsafe assembly permission I had to change the database owner to the system admin account. Then it worked.

USE <DatabaseName>
GO
EXEC sp_changedbowner ‘sa’
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.