C# 编写SQL SERVER 2005 的存储过程
来源:互联网 发布:layout软件下载 编辑:程序博客网 时间:2024/04/30 01:54
以下是一个查询IP地址归属地的CLR存储过程,三步:
1、用C#来做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地址转为数字
string[] tmp = ip.Value.Split(new string[]{"."},StringSplitOptions.None);
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 = "<无归属地数据>";
}
}
}
}
/// <summary>
/// INT32 转为二进制字符串
/// </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>
/// 二进制字符串转为整数
/// </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所在的服务器上,假设路径为 c:clripLib.dll 以下方法注册程序集
CREATE ASSEMBLY [ipLib]
FROM 'c:clripLib.dll'
3、创建存储过程
CREATE PROCEDURE get_ip_addr_info
(
@ip nvarchar(20),
@info nvarchar(500) OUTPUT
)
AS EXTERNAL NAME ipLib.AddrInfo.getAddrInfo
之后你就可以看到名为 get_ip_addr_info 的存储过程,调用方法与普通T/SQL存储过程相同
- C# 编写SQL SERVER 2005 的存储过程
- C# 编写SQL SERVER 2005 的存储过程
- 使用C#编写SQL Server的扩展存储过程
- Asp.Net+Sql Server之C#编写的操作Sql Server存储过程的类
- SQL Server 2000存储过程的编写
- SQL Server 存储过程编写
- 编写安全的SQL Server扩展存储过程
- SQL Server存储过程的编写和优化措施
- 编写安全的SQL Server扩展存储过程
- 编写SQL Server的扩展存储过程实例
- SQL Server存储过程中编写事务处理的方法小结
- 使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
- 使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
- 使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
- [翻译]使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
- 在SQL Server 2005中编写存储过程
- 在SQL Server 2005中编写存储过程
- SQL Server编写存储过程小工具
- LINQ 的演变及其对 C# 设计的影响
- CUBE、ROLLUP 、COMPUTE 使用详解
- 氧能中毒,水也能中毒
- 取得某进程的命令行
- 指针悬挂(转)
- C# 编写SQL SERVER 2005 的存储过程
- 编写自己的DEBUG_PRIN函数
- 在数据库中使用对象的好处
- 关于arcGIS server9.2的开发
- Vi 指令大全
- 爆笑校园生活——人在校园的日子
- SQL数据导入导出系列
- UML学习-------活动图(1)
- JSP下取当前时间并显示的代码,jsp年月日显示时间