• SQL Server CLR 调用DLL TSQL 和 CLR 類型不符


    一、VS2005创建项目SqlServerCLRCallNet,新建CLRFunction.cs

    View Code
    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.SqlServer.Server;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;

    namespace SqlServerCLRCallNet
    {
        public class CLRFunction
        {
            [Microsoft.SqlServer.Server.SqlProcedure()]
            public static void GetResultSetString(SqlString SNO)//不同点
            {
                SqlCommand cmd;

                using (SqlConnection conn = new SqlConnection("context connection=true"))
                {
                    conn.Open();
                    cmd = new SqlCommand("SELECT id,name,modifieddate FROM ChangeHistory WHERE name = @SNO ", conn);

                    SqlParameter para = new SqlParameter("@SNO", System.Data.SqlDbType.VarChar);//不同点
                    para.Value = SNO;
                    cmd.Parameters.Add(para);

                    SqlContext.Pipe.ExecuteAndSend(cmd);
                }
            }

            [Microsoft.SqlServer.Server.SqlProcedure()]
            public static void GetResultSetInt(int SNO)//不同点
            {
                SqlCommand cmd;

                using (SqlConnection conn = new SqlConnection("context connection=true")) 
                {
                    conn.Open();  
                    cmd = new SqlCommand("SELECT id,name,modifieddate FROM ChangeHistory WHERE id = @SNO ", conn);

                    SqlParameter para = new SqlParameter("@SNO", System.Data.SqlDbType.Int);//不同点
                    para.Value = SNO;
                    cmd.Parameters.Add(para);

                    SqlContext.Pipe.ExecuteAndSend(cmd);
                }
            }

        }
    }

    二、将DLL放到服务器C盘根目录

    三、执行以下SQL语句

    CREATE ASSEMBLY InsertCurrency FROM 'c:\SqlServerCLRCallNet.dll'
    WITH permission_set = Safe;
    GO

    --drop PROCEDURE InsertCurrency_Int
    CREATE PROCEDURE dbo.InsertCurrency_Int(@SNO int)
    AS EXTERNAL NAME InsertCurrency.[SqlServerCLRCallNet.CLRFunction].GetResultSetInt;
    GO 

    EXEC InsertCurrency_Int '1'

    go
    --drop PROCEDURE InsertCurrency_String
    CREATE PROCEDURE dbo.InsertCurrency_String(@SNO nvarchar(200))
    AS EXTERNAL NAME InsertCurrency.[SqlServerCLRCallNet.CLRFunction].GetResultSetString;

    go
    EXEC InsertCurrency_String 'landor'

    id name modifieddate
    1 Landor 2012-9-13 9:26

    為什麼要用.net開發store procedure?

    T-SQL stored procedure 和 SQL CLR stored procedure 其實不一定是在效能上的選擇,而是開發難易度的選擇,例如若要格式化字串,T-SQL 根本做不到,一定要用 SQL CLR 的 UDF,若是要存取檔案/AD/其他外部資源時,T-SQL 要實作也很困難,這時除了 SQL CLR 外,別無它法 .

    另一種因素是簡化設計的複雜度,例如累進式迴圈(for)/游標(Cursor)或是其他 T-SQL 無法做到或必須以相當複雜的 T-SQL 才能實作出來的程式,就可以改用 SQL CLR 來處理 .http://social.msdn.microsoft.com/Forums/zh-TW/240/thread/c80255a7-5cf2-4a54-b9c1-995098c18a0b

  • 相关阅读:
    js判断undefined类型
    js replace 全部替换
    第五次作业--原型设计
    第三次作业--团队展示
    第二次作业——数独终盘
    软件工程实践2017第一次作业
    课堂作业2
    课堂作业1
    第四次作业 计算器第二步
    第三次作业
  • 原文地址:https://www.cnblogs.com/Snowfun/p/2682837.html
Copyright © 2020-2023  润新知