国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
C# 編寫SQL SERVER 2005 的存儲(chǔ)過(guò)程 - 9who - 博客園

C# 編寫SQL SERVER 2005 的存儲(chǔ)過(guò)程

以下是一個(gè)查詢IP地址歸屬地的CLR存儲(chǔ)過(guò)程,三步:

1、用C#來(lái)做DLL,代碼如下:

//====================================================================
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlTypes;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;

public class AddrInfo
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void getAddrInfo(SqlString ip, out SqlString info)
    {
        using (SqlConnection connection = new SqlConnection("context connection=true"))
        {
            //IP地址轉(zhuǎn)為數(shù)字
            string[] tmp = ip.Value.Split(new string[]{"."},StringSplitOptions.None);//split()分割成字符串?dāng)?shù)組
            Int64 ipn = ToInt(ToBinary(tmp[0]) + ToBinary(tmp[1]) + ToBinary(tmp[2]) + ToBinary(tmp[3]));

            connection.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = connection;
            cmd.CommandType = System.Data.CommandType.Text;

            cmd.CommandText = "select addr_info from CZIP where ipn1<="
                                + ipn.ToString() + " and ipn2>="
                                + ipn.ToString();
            SqlDataReader dr = cmd.ExecuteReader();

            using (dr)
            {
                if (dr.Read())
                {
                    info = dr.GetString(0);
                }
                else
                {
                    info = "<無(wú)歸屬地?cái)?shù)據(jù)>";
                }
            }
        }
    }

    /// <summary>
    /// INT32 轉(zhuǎn)為二進(jìn)制字符串
    /// </summary>
    /// <param name="piNumber"></param>
    /// <returns></returns>
    private static String ToBinary(string num)
    {
        int piNumber = Int32.Parse(num);
        string strBinary = "";
        int iTmp;

        do
        {
            iTmp = piNumber % 2;
            strBinary = iTmp.ToString() + strBinary;
            piNumber = piNumber / 2;
        } while (piNumber != 0);

        return strBinary.PadLeft(8, '0');
    }

    /// <summary>
    /// 二進(jìn)制字符串轉(zhuǎn)為整數(shù)
    /// </summary>
    /// <param name="pStrBinary"></param>
    /// <returns></returns>
    private static long ToInt(string pStrBinary)
    {
        char[] charArr = pStrBinary.ToCharArray();
        long iReturnValue = 0;
        int iPow = 0;

        for (int i = 0; i < charArr.Length; i++)
        {
            if (charArr[i].ToString() != "0" && charArr[i].ToString() != "1")
            { throw new Exception("輸入字符串格式不正確!"); }
        }

        for (int i = 0; i < charArr.Length; i++)
        {
            iPow = Convert.ToInt32(charArr[i].ToString());
            iReturnValue += iPow * Convert.ToInt64(Math.Pow(2, charArr.Length - i - 1));
        }

        return iReturnValue;
    }
}
//===========================================================================

2、將編譯后的DLL放到SQL SERVER 2005所在的服務(wù)器上,假設(shè)路徑為  c:\clr\ipLib.dll 以下方法注冊(cè)程序集

CREATE ASSEMBLY [ipLib]
FROM 'c:\clr\ipLib.dll'

3、創(chuàng)建存儲(chǔ)過(guò)程

CREATE PROCEDURE get_ip_addr_info
(
@ip nvarchar(20),
@info nvarchar(500) OUTPUT
)
AS EXTERNAL NAME ipLib.AddrInfo.getAddrInfo


之后你就可以看到名為 get_ip_addr_info 的存儲(chǔ)過(guò)程,調(diào)用方法與普通T/SQL存儲(chǔ)過(guò)程相同

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C#下SQL Server 2008表類型參數(shù)傳遞 - 51CTO.COM
存儲(chǔ)過(guò)程從入門到精通(轉(zhuǎn)載)
SQL SERVER數(shù)據(jù)庫(kù)開發(fā)之存儲(chǔ)過(guò)程應(yīng)用
.net調(diào)用存儲(chǔ)過(guò)程詳解
C#接收存儲(chǔ)過(guò)程返回值
存儲(chǔ)過(guò)程的優(yōu)缺點(diǎn)是什么?
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服