动态网站制作指南



当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧 Rss
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket

演练:使用托管代码创建存储过程


发表日期:2009-2-2


SQL Server 2005 数据库存储过程现在可以使用 .NET Framework 语言(如 Visual Basic、C# 和 C++)在托管代码中进行编写。使用托管代码编写的存储过程称为 CLR 存储过程。

通过将“存储过程”项添加到 SQL Server 项目,可以创建 SQL 存储过程。成功部署到 SQL Server 之后,可通过与任何其他存储过程相同的方式调用和执行在托管代码中创建的存储过程。

本演练演示如下任务:

创建新的“Windows 应用程序”项目。

在托管代码中创建存储过程。

将此存储过程部署到 SQL Server 2005 数据库。

创建在数据库上测试存储过程的脚本。

查询数据库中的数据,以确认是否正确执行了存储过程。

 先决条件
若要完成本演练,您需要:

到运行在 SQL Server 2005 之上的 AdventureWorks 示例数据库的连接。有关更多信息,请参见 如何:安装示例数据库。

 创建项目
创建新的 SQL Server 项目
从“文件”菜单创建一个新的项目。

选择“SQL Server 项目”,将项目命名为 SQLCLRStoredPRocedure 并单击“确定”。有关更多信息,请参见 如何:创建 SQL Server 项目。

 连接到 SQL Server 2005 数据库
本演练需要到运行在 SQL Server 2005 之上的 AdventureWorks 示例数据库的连接。如果到 AdventureWorks 示例数据库的连接在“服务器资源管理器”中可用,则该连接会在 “添加数据库引用”对话框 中列出。

注意 
在默认情况下,Microsoft SQL Server 中关闭了公共语言运行库 (CLR) 集成功能。必须启用该功能才能使用 SQL Server 项目项。若要启用 CLR 集成,请使用 sp_configure 存储过程的 clr enabled 选项。有关更多信息,请参见 启用 CLR 集成。
 

连接到 AdventureWorks 示例数据库
完成“添加连接”对话框,从而连接到包含在 SQL Server 2005 中的 AdventureWorks 示例数据库。有关更多信息,请参见 添加/修改连接 (Microsoft SQL Server)。

- 或 -

在“添加数据库引用”对话框中选择到 AdventureWorks 示例数据库的一个现有连接。有关更多信息,请参见 “添加数据库引用”对话框。

 创建 SQL Server 存储过程
创建了 SQL Server 项目后,向其中添加一个存储过程。

创建 SQL Server 存储过程
从“项目”菜单中选择“添加新项”。

在 “添加新项”对话框 中选择“存储过程”。

键入 InsertCurrency 作为新存储过程的“名称”。

单击“添加”。

使用以下代码替换代码编辑器中的代码:

注意 
C++ 示例在编译时必须使用 /clr:safe 编译器选项。
 
Visual Basic 复制代码
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server

Partial Public Class StoredProcedures

    <SqlProcedure()> _
    Public Shared Sub InsertCurrency( _
        ByVal currencyCode As SqlString, ByVal name As SqlString)

        Using conn As New SqlConnection("context connection=true")

            Dim InsertCurrencyCommand As New SqlCommand()
            Dim currencyCodeParam As New SqlParameter("@CurrencyCode", SqlDbType.NVarChar)
            Dim nameParam As New SqlParameter("@Name", SqlDbType.NVarChar)

            currencyCodeParam.Value = currencyCode
            nameParam.Value = name


            InsertCurrencyCommand.CommandText = _
                "INSERT Sales.Currency (CurrencyCode, Name, ModifiedDate)" & _
                " VALUES(@CurrencyCode, @Name)"

            InsertCurrencyCommand.Connection = conn

            conn.Open()
            InsertCurrencyCommand.ExecuteNonQuery()
            conn.Close()
        End Using
    End Sub
End Class
C# 复制代码
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;


public partial class StoredProcedures
{
    [SqlProcedure()]
    public static void InsertCurrency_CS(
        SqlString currencyCode, SqlString name)
    {
        using (SqlConnection conn = new SqlConnection("context connection=true"))
        {
            SqlCommand InsertCurrencyCommand = new SqlCommand();
            SqlParameter currencyCodeParam = new SqlParameter("@CurrencyCode", SqlDbType.NVarChar);
            SqlParameter nameParam = new SqlParameter("@Name", SqlDbType.NVarChar);

 

            InsertCurrencyCommand.CommandText =
                "INSERT Sales.Currency (CurrencyCode, Name, ModifiedDate)" +
                " VALUES(@CurrencyCode, @Name)";

            InsertCurrencyCommand.Connection = conn;

            conn.Open();
            InsertCurrencyCommand.ExecuteNonQuery();
            conn.Close();
        }
    }
}
C++ 复制代码
#include "stdafx.h"

#using <System.dll>
#using <System.Data.dll>
#using <System.xml.dll>

using namespace System;
using namespace System::Data;
using namespace System::Data::Sql;
using namespace System::Data::SqlClient;
using namespace System::Data::SqlTypes;
using namespace Microsoft::SqlServer::Server;

// In order to debug your Stored Procedure, add the following to your debug.sql file:
//
// EXEC InsertCurrency_CPP 'AAA', 'Currency Test'
// SELECT * FROM Sales.Currency WHERE CurrencyCode = 'AAA'

public ref class StoredProcedures
{
public:
    [SqlProcedure]
    static void InsertCurrency_CPP(SqlString currencyCode, SqlString name)
    {
        SqlConnection ^conn = gcnew SqlConnection("context connection=true");

        SqlCommand ^insertCurrencyCommand = gcnew SqlCommand();
        SqlParameter ^currencyCodeParam =
            gcnew SqlParameter("@CurrencyCode", SqlDbType::NVarChar);
        SqlParameter ^nameParam =
            gcnew SqlParameter("@Name", SqlDbType::NVarChar);

        insertCurrencyCommand->CommandText =
            "insert Sales.Currency(CurrencyCode, Name, ModifiedDate)" +
            " values(@CurrencyCode, @Name)";
        insertCurrencyCommand->Connection = conn;

        conn->Open();
        insertCurrencyCommand->ExecuteNonQuery();

        conn->Close();
    }
};

 部署、执行和调试存储过程
创建新的存储过程后,可以通过按 F5 生成该存储过程,将其部署到 SQL Server 并进行调试。首先,在位于项目的“TestScripts”文件夹中的“Test.sql”文件中,添加执行和测试存储过程的代码。在 Visual C++ 中,此文件名为“debug.sql”。有关创建测试脚本的更多信息,请参见 如何:编辑 Test.sql 脚本以运行 SQL 对象。

有关调试 SQL 的更多信息,请参见 调试 SQL 数据库对象。

部署并运行 InsertCurrency 存储过程
对于 Visual Basic 和 Visual C#,在“解决方案资源管理器”中,展开“TestScripts”文件夹,再双击“Test.sql”文件。

对于 Visual C++,在“解决方案资源管理器”中,双击“debug.sql”文件。

使用以下代码替换“Test.sql”(在 Visual C++ 中为“debug.sql”)文件中的代码:

 复制代码
EXEC InsertCurrency 'AAA', 'Currency Test'
SELECT * from Sales.Currency where CurrencyCode = 'AAA'按 F5 生成、部署并调试该存储过程。有关不进行调试直接部署的信息,请参见 如何:将 SQL Server 项目项部署到 SQL Server 中。

在“输出窗口”中查看结果,然后选择“从此处显示输出: 数据库输出”。

关注此文的读者还看过:
·2012-2-4 10:00:28 MS SQL Server存储过程参数的隐式类型转换
·2012-2-4 10:00:09 SQL Server如何执行带参数的存储过程?
·2012-2-4 9:58:19 如何:调试 SQL CLR 存储过程
·2012-2-4 9:58:17 数据库连接字符串大全
·2012-2-4 9:57:13 不通过dsn访问sql server
·2012-2-4 9:56:58 数据库完整性就是数据库完整性约束设计
·2012-2-4 9:55:10 通过两个例子讲解PIVOT/UNPIVOT的用法
·2012-2-4 9:55:06 SQL Server导出表到EXCEL文件的存储过程
·2012-2-4 9:54:08 sql server 2008 对 t-sql 语言的增强
站长推荐 PS笔刷下载 在线翻译 系统进程 广告代码
  发表评论
姓 名: 验证码:
内 容:
教程搜索服务
项目外包信息
·ecshop+Discuz! X2+ Home会员整
·寻找网站建设团队或者个人合伙
·LOGO设计外包
·企业网后台程序外包
·ESO关键词优化
·寻中高端网页设计及美工长期合作
·网页美工
·寻求程序合作
·全球连锁餐饮集团网站改版
·预算5-10万元的基于威客、2.0、
·外包一个新闻发布网站 急
·招长期兼职资深设计师合作
·FLASH外包
·产品高端场景摄影
·寻找asp.net开发高手
发布信息 浏览信息
邮件订阅服务
输入你的邮件地址,你将不会错过任何关于<SQL技巧>的内容


数据教程文章分类
SQL教程
SQL技巧
SQL安全
SQL文摘
Oracle教程
MySQL教程
Access教程
DB2教程
Sybase教程
站长工具:Google PR查询|Alexa排名查询|网站速度测试|CSS在线编辑器|OPEN参数生成器|弹出式窗口代码产生器|密码登录生成器|在线按钮生成器|Meta标签生成器|邮箱图标在线生成|多色彩特效字代码生成器|网页代码调试器|在线FTP登陆|Flash取色器|配色代码对照表|配色辞典|CSS生成器|CSS在线压缩|广告代码|框架网页代码生成器|js/vbs加密|md5加密|进制转换|UTF-8 转换工具|在线调色板|Html转换js|Html转换asp|Html转换php|Html转换perl
实用工具:汉字翻译拼音|拼音字典|在线翻译|天气预报|火星文|在线网速测试|符号对照表|个税计算|理财工具|黄金价格|购房银行按揭利率计算|汇率查询|经典小工具|汉字简繁转换|普通单位换算|公制单位换算|生辰老黄历|国内电话区号|国家代码与域名缩写|文字加密解密|元素周期表|健康查询|世界时间|全国各地车牌查询|全国车辆交通违章查询|万年历|二十四节气|汉字横竖排版|手机号码查询|计算器|ip搜索
广告刊登 | 版权声明 | 联系我们 | 加入收藏 | RSS订阅
Copyright © 2000-2012 www.knowsky.com All rights reserved | 沪ICP备05001343号