1
. 在VS.Net2005中新建”SQL Server 项目”;
2 . 创建数据库并将数据库显式标记为可信。
因为无法立即信任附加到 SQL Server 实例的数据库,所以不允许数据库访问超出数据库范围的资源,直到数据库已显式标记为可信。此外,旨在访问数据库以外资源的模块和带有 EXTERNAL_ACCESS 或 UNSAFE 权限设置的程序集还需要其他条件才能成功运行。
默认情况下,此设置为 OFF ,但是可以使用 ALTER DATABASE 语句将其设置为 ON 。
create database km2db
go
USE km2db
GO
ALTER DATABASE km2db SET TRUSTWORTHY ON
3 . 在SQL 2005 中 启用 "clr enabled" 配置选项;
运行下面的代码
-- 启用"clr enabled"配置选项,在.Net Framewrok中执行用户代码.
exec sp_configure ' show advanced options ' , ' 1 ' ;
go
reconfigure ;
go
exec sp_configure ' clr enabled ' , ' 1 '
go
reconfigure ;
exec sp_configure ' show advanced options ' , ' 1 ' ;
go
-- 关闭clr enabled,可以使用
EXEC sp_configure ' clr enabled ' , 0
GO
RECONFIGURE
GO
4 . 如果你的数据库是从 SQL Server 的早期版本升级到 SQL Server 2005 ,该数据库将保留其现有的兼容级别。此时你要将兼容级别设为 90 。SQL Server 2005 的所有安装,默认兼容级别均为 90 。
EXEC sp_dbcmptlevel ' km2db ' , ' 90 ' ;
GO
5 . 在此项目中单击添加— > 添加新项,添加存储过程、触发器、用户定义的函数等。
[ Microsoft.SqlServer.Server.SqlProcedure ]
public static int MrFuPro1()
{
// 在此处放置代码
return 2 ;
}
[ Microsoft.SqlServer.Server.SqlProcedure ]
public static void selectProcedure()
{
SqlCommand command = new SqlCommand(" select * from zk_preasign");
SqlContext. Pipe .ExecuteAndSend(command);
}
[ Microsoft.SqlServer.Server.SqlProcedure ]
public static int AddNum( int x, int y,out string execResult)
{
int z = x + y;
if (z > 0 )
{
execResult = "结果大于零";
}
else
{
execResult = "结果小于等零";
}
return z;
}
6 . 此时回到sql查询分析器,展开km2db可编程性— > 存储过程 将看到所有新生成的存储过程。
7 . 在查询分析器中执行存储过程,以检验新生成的存储过程的有效性.
use km2db
go
declare @ret int
exec @ret = mrfupro1
print @ret
go
exec selectProcedure
go
declare @ret2 int ,
@execResult varchar ( 20 )
exec @ret2 = addnum 10 , 20 , @execResult output
print @ret2
print @execResult
go
8 .如果你在你的程序集中调用了其它dll ,可通过下面的方式在sql2005中注册.
如注册System.Messaging.dll;
CREATE ASSEMBLY Messaging
AUTHORIZATION dbo
FROM ' C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Messaging.dll '
WITH PERMISSION_SET = UNSAFE
GO
8 . 如果你是在客户机上部署你的dll,在sql2005中通过以下方式进行。
-- 如新建的sql server项目
-- 命名空间为: mrfuDBOP
-- 类名为:cMrPro
-- 方法为:public static int AddNum(int x,int y,out string execResult)
ALTER DATABASE km2db SET TRUSTWORTHY ON
GO
CREATE ASSEMBLY mrfuDBOP -- 你的程序集命名空间名称
AUTHORIZATION dbo
FROM ' F:\mrfuDBOP.dll '
WITH PERMISSION_SET = UNSAFE
GO
CREATE PROCEDURE pro_execAddNum
@ret2 int ,
@execResult varchar ( 20 ) output
AS EXTERNAL NAME mrfuDBOP. [ mrfuDBOP.cMrPro ] .AddNum
GO
2 . 创建数据库并将数据库显式标记为可信。
因为无法立即信任附加到 SQL Server 实例的数据库,所以不允许数据库访问超出数据库范围的资源,直到数据库已显式标记为可信。此外,旨在访问数据库以外资源的模块和带有 EXTERNAL_ACCESS 或 UNSAFE 权限设置的程序集还需要其他条件才能成功运行。
默认情况下,此设置为 OFF ,但是可以使用 ALTER DATABASE 语句将其设置为 ON 。
create database km2db
go
USE km2db
GO
ALTER DATABASE km2db SET TRUSTWORTHY ON
3 . 在SQL 2005 中 启用 "clr enabled" 配置选项;
运行下面的代码
-- 启用"clr enabled"配置选项,在.Net Framewrok中执行用户代码.
exec sp_configure ' show advanced options ' , ' 1 ' ;
go
reconfigure ;
go
exec sp_configure ' clr enabled ' , ' 1 '
go
reconfigure ;
exec sp_configure ' show advanced options ' , ' 1 ' ;
go
-- 关闭clr enabled,可以使用
EXEC sp_configure ' clr enabled ' , 0
GO
RECONFIGURE
GO
4 . 如果你的数据库是从 SQL Server 的早期版本升级到 SQL Server 2005 ,该数据库将保留其现有的兼容级别。此时你要将兼容级别设为 90 。SQL Server 2005 的所有安装,默认兼容级别均为 90 。
EXEC sp_dbcmptlevel ' km2db ' , ' 90 ' ;
GO
5 . 在此项目中单击添加— > 添加新项,添加存储过程、触发器、用户定义的函数等。
[ Microsoft.SqlServer.Server.SqlProcedure ]
public static int MrFuPro1()
{
// 在此处放置代码
return 2 ;
}
[ Microsoft.SqlServer.Server.SqlProcedure ]
public static void selectProcedure()
{
SqlCommand command = new SqlCommand(" select * from zk_preasign");
SqlContext. Pipe .ExecuteAndSend(command);
}
[ Microsoft.SqlServer.Server.SqlProcedure ]
public static int AddNum( int x, int y,out string execResult)
{
int z = x + y;
if (z > 0 )
{
execResult = "结果大于零";
}
else
{
execResult = "结果小于等零";
}
return z;
}
6 . 此时回到sql查询分析器,展开km2db可编程性— > 存储过程 将看到所有新生成的存储过程。
7 . 在查询分析器中执行存储过程,以检验新生成的存储过程的有效性.
use km2db
go
declare @ret int
exec @ret = mrfupro1
print @ret
go
exec selectProcedure
go
declare @ret2 int ,
@execResult varchar ( 20 )
exec @ret2 = addnum 10 , 20 , @execResult output
print @ret2
print @execResult
go
8 .如果你在你的程序集中调用了其它dll ,可通过下面的方式在sql2005中注册.
如注册System.Messaging.dll;
CREATE ASSEMBLY Messaging
AUTHORIZATION dbo
FROM ' C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Messaging.dll '
WITH PERMISSION_SET = UNSAFE
GO
8 . 如果你是在客户机上部署你的dll,在sql2005中通过以下方式进行。
-- 如新建的sql server项目
-- 命名空间为: mrfuDBOP
-- 类名为:cMrPro
-- 方法为:public static int AddNum(int x,int y,out string execResult)
ALTER DATABASE km2db SET TRUSTWORTHY ON
GO
CREATE ASSEMBLY mrfuDBOP -- 你的程序集命名空间名称
AUTHORIZATION dbo
FROM ' F:\mrfuDBOP.dll '
WITH PERMISSION_SET = UNSAFE
GO
CREATE PROCEDURE pro_execAddNum
@ret2 int ,
@execResult varchar ( 20 ) output
AS EXTERNAL NAME mrfuDBOP. [ mrfuDBOP.cMrPro ] .AddNum
GO
SQL2005NewTec Petshop4.0Architecture