类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:










页面导航:
正文内容:using system;
using system.data;
using system.data.sql;
using system.data.sqlserver;
using system.data.sqltypes;
using system.io;
public partial class storedprocedures
{
[sqlprocedure]
public static void usp_readtextfile(string sinputfile,
out sqlstring scolumn)
{
string strcontents;
scolumn = "";
try
{
streamreader strreader = new streamreader(sinputfile);
strcontents = strreader.readtoend();
strreader.close();
scolumn = strcontents;
}
catch (exception ex)
{
sqlpipe sp = sqlcontext.getpipe();
sp.send(ex.message);
}
}
}
首先,我们检查一下using语句。这些语句使得程序在调用sql server .net数据提供程序的命名空间中的类时,无需使用全名来引用。sql server .net数据提供程序(在命名空间system.data.sqlserver中)是用来连接sql server系统的。
接着,我们注意一下位于方法名称前面的[sqlprocedure]属性。这个属性的存在就告诉了.net编译器和运行库这个方法将作为sql server存储过程使用。另外,你还会发现这个类的默认名称被设置为“storedprocedures”。在这个类中包含了一个名为usp_readtextfile的静态方法,因为在此使用的是c#,所以这个方法必须被定义为静态的,如果你使用的是visual basic,这个方法就应该被定义为shared。usp_readtextfile方法接收两个参数。第一个参数是输入参数,用于传递操作系统的文件名称;第二个参数是输出参数(用out关键字标志),这个参数将以sqlstring数据类型的形式把文本文件的内容返回给调用者,sqlstring数据类型与t-sql varchar数据类型相对应。
考虑到有些读者可能不能读懂c#代码,我们在这先对这段代码的结构做个简要地描述:这段代码先打开一个文本文件,然后读取它的内容,接着将内容放到sqlstring类型的输出变量中输出。在这个存储过程代码开始部分,先声明了一个string类型的变量用来存放文本文件的内容。接着,在try-catch结构中读取文件的内容,首先,创建了一个名为strreader的streamreader类型的对象并将包含在sinputfile变量中的输入文件名传递给它,接着利用streamreader的readtoend方法读取输入文件的全部内容并将其存入strcontents变量中。在文件内容读取完毕以后,关闭streamreader对象并将文件内容移至名为scolumn的输出变量中。
如果在读取文件内容的过程中发生了错误,catch模块中的代码将被执行。在catch模块中,利用了一个sqlpipe类型的对象实例将错误信息传送给这个存储过程的调用者。首先,利用sqlcontext.getpipe方法创建了一个sqlpipe类型的对象实例,然后使用sqlpipe对象的send方法将exception对象实例ex的message属性的内容传送给调用存储过程usp_readtextfile的程序。
要将这个存储过程部署到sql server中,需要两个步骤:编译和安装。开发人员可以自己完成这些步骤,先将相应的dll程序集移至合适的位置,再运行相应的sql server命令;或者他可以使用visual studio自动地完成这些工作。如果要自己去做,首先先将编译得到的dll程序集拷贝到sql server能够访问到的文件系统中,然后先后运行create assemby和create procedure命令。然而,如果你是使用visual studio 2005来开发的,你仅仅需要先后选择“生成”和“部署解决方案”两个菜单选项就能将上述的clr存储过程安装到sql server数据库中。在下一个部分中,我们将给读者展现使用visual studio 2005构建和部署clr存储过程usp_readtextfile的具体步骤。
使用sql server和visual studio 2005构建存储过程
下面的表格中概括了使用visual studio 2005结合sql server 2005创建和部署一个clr存储过程的所需步骤。
开发流程概述
步骤 简要说明 所用工具 1 创建新的visual studio sql server项目 visual studio 2005文件菜单 2 创建数据库连接 sql server项目模板 3 添加存储过程 存储过程项目模板 4 生成项目 visual studio 2005生成菜单 5 部署项目 visual studio 2005生成菜单 总共5步
集成工具
要使用visual studio 2005创建clr存储过程,你得首先创建一个sql server项目。打开visual studio 2005,选择“file”*“new project”,然后就会跳出“new project”对话框,在这个对话框中,你从已经安装的visual studio模板列表中选择sql server项目并给其命名。在这里所设定的名称将作为相应visual studio解决方案的名称,同时也是未来经过编译得到的程序集的名称。如果在你的项目中仅仅只包含一个存储过程,它也可以作为这个存储过程的名称,当然,如果你希望你的项目中包含多个存储过程或者还有其他类型的clr数据库对象,你完全可以为其指定其他的名称。 如图6所示,点击“ok”按钮就会在visual studio 2005 ide中创建一个新的sql server项目,同时,sql server项目模板会自动提示你设置sql server 2005数据库连接信息,visual studio将使用这里设置的连接信息来调试和部署你的解决方案。典型的用法是,最初这里设定的目标是用于开发的数据库;当经过测试和质量评价以后,相应的.net项目就能被部署到生产环境中的sql server实例。 图7——设置sql server项目的数据库连接属性
在“connection properties”对话框中,你可以在“select or enter a server name”下拉框中输入你的目标sql server实例名称。如果在你的开发环境中注册了多个sql server实例,当你点击下拉箭头时,所有已注册的实例名称都会被列出。如果你的目标系统不在下拉列表中,你也可以在下拉框中输入相应的实例名称或者是ip地址。
选择好目标实例之后,你接下来需要选择用来连接这个sql server实例的身份验证模式。选择“windows nt integrated security”,系统会把你在windows中使用的用户名和密码传递给sql server用以验证并连接。如果你的目标实例没有采用集成验证模式,你也可以在“user id”和“password”两个文本框中提供用以连接目标实例的用户信息。
接下来,选择将作为部署目标的数据库。点击下拉框,会显示所有你有权限访问的数据库。当然,这里供你选择的数据库都已经存在于sql server中了。
当你输入了所有必要的连接信息后,你可以点击“test connection”按钮来测试一下连接。如果所有的连接信息都是有效的,将会显示“successful connection”消息,否则你必须更正连接信息。点击“ok”按钮后,连接信息就会被写入visual studio项目中并出现visual studio ide界面。由于连接信息是一直存于项目中的,所以最好使用集成安全,因为它并不存储实际的登录信息。如果你是显示地提供了用户名和密码,那你要保证你的项目的存储位置是安全的。 图8——新建的sql server项目
刚刚建立的sql server项目最初是一个空的解决方案。在“solution explorer”中,所显示的项目名称就是在“new project”对话框中设置的。另外,适当的引用文件会被自动地添加到项目中。我们特别注意一下sqlaccess引用,它是包含sql server .net provider的系统dll,也就是说,它是我们创建和运行.net数据库对象所必需的。
要在visual studio 2005中创建一个clr存储过程,选择visual studio 2005的“project”*“add stored procedure”。
图9——添加clr存储过程
在图9中,你能再次领略到sql server和visual studio 2005集成的紧密程度。在visual studio的“project”菜单项中包含了创建各种.net数据库对象的选项。另外,你也可以右击“solution explorer”窗口中的项目名称,选择“add item”选项,这同样会出现创建各种.net数据库对象的选项。无论哪种情况,接着都会显示如图10所示的“add new item”对话框。 图10——选择存储过程模板