存储过程是SQLServer2005程序设计中最重要的一环,您会发现,应用系统中的许多作业都会交由存储过程来完成。在以下的操作步骤中,我们带大家利用VisualStudio2005整合式开发环境,实际建立一个CLR存储过程(采用VisualC#),并示范如何使用它:
1.如图表1所示,选取MicrosoftVisualStudio2005菜单指令来开启VisualStudio2005的整合式开发环境。
2.从「项目」菜单中选取「新增/项目」指令。
3.如图表2所示,选取「类别库」模板,然后依序指定项目名称(SayHello)、存放位置、以及方案名称(SayHello)之后,按一下「确定」按钮。
4.于VisualStudio2005整合式开发环境的「方案总管」中,使用鼠标右键按一下预设建立的Class1.cs并从快捷菜单中选取「删除」指令以便将它删除。
5.从「项目」菜单中选取「加入新项目」指令。
6.如图表3所示,于「加入新项目」对话框中,选取「类别」模板,然后以SayHelloClass.cs作为类别档的文件名称,然后按一下「加入」按钮。
7.于程序代码编辑器中,将SayHelloClass类别的程序代码改写如下:
usingMicrosoft.SqlServer.Server;
namespaceSayHello
{
publicclassSayHelloClass
{
[Microsoft.SqlServer.Server.SqlProcedure()]
publicstaticvoidSayHello(refstringgreeting)
{
SqlMetaDatacolumnInfo=newSqlMetaData("问候",SqlDbType.NVarChar,12);
SqlDataRecordgreetingRecord=newSqlDataRecord(newSqlMetaData[]{columnInfo});
greetingRecord.SetString(0,"大家好,我是章立民!");
//呼叫Pipe对象的Send方法将单一数据列结果集(也就是SqlDataRecord对象)
//直接传送给客户端。
SqlContext.Pipe.Send(greetingRecord);
//将文字符串指派给输出参数。
greeting="现在时间是"+DateTime.Now.ToString()+"---章立民研究室向您问好!";
}
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
上述程序代码中的SayHello程序是一个公用静态方法,而它也就是CLR存储过程所实际呼叫的对象。
8.按一下工具列中的「储存」按钮。
9.如图表4所示,使用鼠标连按两下「方案总管」中的Properties节点,一开始会显示出「应用程序」索引卷标页面,您可以去设定组件名称与跟命名空间。不过以本实作演练而言,请采用默认值,不要更改。
10.按一下左侧的「编译」索引卷标来切换至其页面,并且将「建置输出路径」设定成bin然后按一下工具列中的「储存」按钮。
11.从「建置」菜单中选取「建置SayHello」指令。
12.好的,我们现在已经完成组件的建置作业,现在必须回到SQLServerManagementStudio中,以便登录组件并建立指向该组件的存储过程。
13.请您于SQLServerManagementStudio中执行以下的程序代码,以便使用CREATEASSEMBLY陈述式来登录组件SayHello.dll,然后使用CREATEPROCEDURE陈述式建立一个会参考所登录之组件SayHello.dll的存储过程:
USE北风贸易;
GO
IFEXISTS(SELECT*FROMsys.proceduresWHERE[name]='SayHello')
DROPPROCEDURESayHello;
GO
IFEXISTS(SELECT*FROMsys.assembliesWHERE[name]='SayHello')
DROPASSEMBLYSayHello;
GO
--登录组件SayHello.dll(请务必确认组件所在路径正确)
CREATEASSEMBLYSayHello
FROM'C:\SQL2005Demo\CH13\SayHello\SayHello\bin\SayHello.dll'
WITHpermission_set=Safe;|
GO﹂──>组件的位置路径
--建立一个会参考所登录之组件SayHello.dll的存储过程
CREATEPROCEDUREdbo.SayHello
(
@Greetingnvarchar(80)OUTPUT
)
ASEXTERNALNAMESayHello.[SayHello.SayHelloClass].SayHello;
GO↓
[命名空间.类别名称]
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
14.请您继续于SQLServerManagementStudio中执行以下的程序代码,以便尝试执行我们所建立的CLR存储过程(执行结果如图表6所示):
USE北风贸易;
GO
EXECsp_configure'clrenabled','1';
GO
RECONFIGURE;
GO
DECLARE@return_valueint,@Greetingnvarchar(80);
--执行CLR存储过程并取得传回值与输出变量的值
EXECUTE@return_value=dbo.SayHello
@Greeting=@GreetingOUTPUT;
--检视传回值与输出变数的值
SELECT@return_valueAS传回值,
@GreetingAS"输出参数@Greeting之值";
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
【编辑推荐】