现在的位置: 首页 > 综合 > 正文

从 ORACLE的RAWTOHEX到C#的RAWTOHEX

2012年05月29日 ⁄ 综合 ⁄ 共 1215字 ⁄ 字号 评论关闭

我们先了解一下基本知识:

     我们知道Oracle中有函数RAWTOHEX(rawvalue),将RAW类数值转换成一个相应的16进制表示的字符串,rawvalue中的每个字节都被转换成为一个双字节的字符串。当我们给数据表中的ID定义成RAW(16)类型时,用RAWTOHEX(ID)得到的将是一个用16进制表示的字符串,该字符串的长度是32。同理RAW(8)得到的应该是一个长度为16的字符串。

ORACLE中有一个SYS_GUID()函数,返回的是唯一的16进制表示的字符串,长度也是32.因此我们可以给RAW(16)类型的ID设置默认值为:SYS_GUID(),但不能给字节数小于16的RAW类型设置SYS_GUID(),会提示长度超出范围。

 

接下来就是我遇到的问题了,通常我们在PL/SQL中写查询语句时都这么写:select ID from test,看到的ID显示为已经被RAWTOHEX过的数据,比如:A03BDB52E4800D74E044001321BD1C8B,但我们在C#中查询ORACLE数据库时,会将RAW(16)类型的ID返回为一个 byte[]数组,长度为16.这和我们在PL/SQL中看到的ID是不一样的。有时候在调试代码时想看看这个ID是不是我们想要的ID时很不方便。因此我们有必要吧这个数组转换成和PL/SQL中一样的数据显示。

我们上面已经了解到这个byte[]数组中的每一个byte都被转换成了一个双字节的字符串,我们在C#中也定义一个RAWTOHEX函数,如下: ,同理,我们也可以定义一个HEXTORAW将16进制表示的字符串转换成byte[]数组方便插入数据库。

 

 

抱歉!评论已关闭.