zoukankan      html  css  js  c++  java
  • c# clr创建mssql的存储过程、函数

    除了创建普通的存储过程外,还可以执行本机的文件操作、程序操作等,相当于功能扩展(需要mssql中配置权限)

    但这样做有点超出数据库的功能了,按理说数据库只负责存储。

    好像只能是单体的dll,引用其他dll后再注册到mssql时找不到

    -----------------------------------------------------------------

    转自:

    https://www.cnblogs.com/aji88/archive/2009/06/04/1496219.html

    在Sql Server 2005中,可以创建基于.Net Framework公共语言运行时(CLR)在存储过程。

    要创建一个CLR存储过程,大致步骤如下:

    1. 开启SQL Server 2005的CLR支持。
    2. 编写CLR存储过程内容,并把类编译成DLL文件。
    3. 注册程序集。
    4. 创建引用程序集的存储过程。
    5. 执行CLR存储过程。

    一.开启SQL Server 2005的CLR支持。

    exec sp_configure 'clr','1'
    go

    reconfigure
    go

    二.编写CLR存储过程(以C#为例)

    打开vs2005后,新建一项目,Visual C#->数据库,选择“SQL Server项目”,然后会弹出一个选择数据库的对话框,设置好要访问的数据库。在项目中添加一个存储过程。文件名是CLR_SP.CS

    在CLR_SP.CS中输入如下代码:

    复制代码
    Code
    Code
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;
    using Microsoft.SqlServer.Server;


    public partial class StoredProcedures
    {
        [Microsoft.SqlServer.Server.SqlProcedure]
        public static void Clr_Select(out string returnStr)
        {
            using (SqlConnection conn = new SqlConnection("context connection=true"))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand("select * from tb_area", conn);

                SqlDataReader dr = cmd.ExecuteReader();

                System.Text.StringBuilder sb = new System.Text.StringBuilder();

                
                while (dr.Read())
                {
                    sb.Append(dr[0].ToString() + ":" + dr[1].ToString()+" ");
                }
                returnStr = sb.ToString();           

                conn.Close();

            }
        }
    };
    复制代码

    然后选择“生成”-》“生成<项目名称>”,这样相应的就编译成了相应的DLL文件。

    三.注册程序集

    注册程序集有三种方法:

    1.在SQL Server Management studio 里有注册向导的窗口

    在程序集路径中选择DLL文件

    2.用SQL代码

    Code
    CREATE ASSEMBLY CLR_SPs
    FROM 'D:webNet APPSqlServerProject1SqlServerProject1inDebugClr_SPs.dll'
    GO

    3.在vs2005中选择“生成”-》“部署<项目名称>”,则会直接在相应的数据库里部署程序集。

    四.创建引用程序集的存储过程。

    注册完成后,可以创建引用程序集的存储过程,如下代码:

    Code
    CREATE PROCEDURE Clr_Select
    @outstr navarchar(400) output
    AS EXTERNAL NAME Clr_SPs.StoredProcedures.Clr_Select

    其中Clr_sps是程序集的名称,StoredProcedures是类的名称,Clr_Select是静态方法的名称。


    五.执行CLR存储过程。


    declare @r nvarchar(4000)
    exec dbo.clr_select @r output
    print @r

    这样的话,我们就可以利用sql Server 2005来执行一些非数据类的操作,比如发email,执行FTP操作等。。。

  • 相关阅读:
    thinkphp计划任务使用cronRun-Thinkphp3.1版
    AJAX 跨域请求
    可以做外汇交易接口的网站
    thinkphp 定时执行php文件 php自动执行php文件
    关于major、minor的解释
    Codeforces Round #370 (Div. 2) A B C 水 模拟 贪心
    2016 ACM/ICPC Asia Regional Dalian Online 1006 /HDU 5873
    Codeforces Round #280 (Div. 2) A B C 暴力 水 贪心
    codevs 1299 线段树 区间更新查询
    Codeforces Round #260 (Div. 2) A B C 水 找规律(大数对小数取模) dp
  • 原文地址:https://www.cnblogs.com/81/p/15193442.html
Copyright © 2011-2022 走看看