惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
雷峰网
雷峰网
S
SegmentFault 最新的问题
量子位
有赞技术团队
有赞技术团队
V
V2EX
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
B
Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Jina AI
Jina AI
C
Check Point Blog
G
Google Developers Blog
博客园 - 叶小钗
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园_首页
T
Tailwind CSS Blog
B
Blog RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
U
Unit 42

博客园 - Tiu

2010走了,又是一年,留个脚印 Commerce Server 2007 随笔一 2009眨眼间过去了,留个纪念 asp.net ajax随笔二 asp.net中慎用static全局变量 asp.net ajax随笔一 收集的关于依赖注入及Unity application block入门的一些资料 2008最后一篇:总结与展望 文件操作类简介 防止页面在提交的过程中多次点击按钮 C#网络编程随笔一 装AJAX.NET 1.0的环境,我遇到个问题,进来解答下 关于邮件群发 XML学习一 asp.net窗中的两个Form问题 URL重写入门 动态从数据库中选择Top 个数 关于在数据层返回SqlDataReader 编写类和子程序的几个原则
第一次使用SQLCLR
Tiu · 2007-05-24 · via 博客园 - Tiu

     今天遇到个在数据库中进行数据转换的问题,我在数据库中用十六进制形式存储了一些数据,但是我想用存储过程选出来时数据要用十进制形式显示,我在数据库中没有找到相应的函数或者方法进行这种操作。例如:十进制:4097对应的十六进制为1001,我在数据库中存的是1001,以varchar的形式存储的。当然如果在C#程序中这种转换就非常简单了:Convert.ToInt32(rfid, 16).ToString(),这样十六进制的rfid就转换成十进制了。
     后来想到了SQL 2005集成了CLR功能,可以用编写普通程序的方式编写存储过程或函数等。于是就在vs2005中新建一个sqlserver project的项目,关联到相应的数据库,截图太麻烦了,相信大家也都明白,我这就不截图了,建完项目后新建一个“用户定义的函数”项,然后添加下列代码:

    [Microsoft.SqlServer.Server.SqlFunction]
    
public static SqlString GetIntRFID(SqlString rfid)
    
{
        
// 在此处放置代码
        string str;
        
if (rfid.Value.Equals("NNNN"))
            str 
= String.Empty;
        
else
            str 
= Convert.ToInt32(rfid.Value, 16).ToString();
        
return str;
    }

然后编译生成,在点击部署,这样在sql2005数据库中就能找到相应的函数,然后调用此函数,参数为数据库中16进制的数,返回的为10进制的数值,这样就达到了自己的目的,并且个人觉得相对与自己写一个把16进制转换成10进制的函数要简单的多。
   sql2005默认好像是没有启用clr功能的,可以先查询一下:exec sp_configure 'clr enabled'  如果config_value项为0,则表示没有启用,要执行 exec sp_configure 'clr enabled' ,1使它变为1,最后运行 reconfigure with override完成操作。

      微软的东西更新太快,看来只有先了解下,等需要的时候在深入.