【问题标题】:Checking a string whether it is string version of oracle raw(16) type field [closed]检查字符串是否是 oracle raw(16) 类型字段的字符串版本 [关闭]
【发布时间】:2013-05-07 15:29:21
【问题描述】:

是否可以在 C# 中检查字符串,是否是 oracle raw(16) 类型数据的字符串版本?例如,“5D03D47919127C4DBBD58AF69BF4D81A”是原始(16)类型数据的字符串版本。

【问题讨论】:

  • raw 是二进制数据,如果我没记错的话。
  • 您是在尝试持久化还是检索或两者兼而有之?
  • 我想检查一个字符串是否是raw16格式。
  • 你真的在问十六进制吗?

标签: c# oracle types


【解决方案1】:

我不确定您真正要问的是什么。是这样的吗?

string hexstr = "5D03D47919127C4DBBD58AF69BF4D81A";

var allowChars = new HashSet<char>("0123456789ABCDEF");

bool isAHexString = hexstr.All(allowChars.Contains) && hexstr.Length == 32;

【讨论】:

  • 是的,我很高兴被理解:)。
【解决方案2】:

当您从 Oracle 检索原始(字节)时,您需要执行以下操作:

var str = System.Text.Encoding.Default.GetString(rawColumnData);

您可以确保使用正确的编码。

【讨论】:

  • 我不想把它转换成字符串。
  • @serefbilge 你想传递字节数组吗?为什么?
  • 我想检查一个 raw(16) 类型的确认码,然后再检查它是否存在于数据库中。这样,如果它不是真正的格式,我就不需要从数据库中检查它。
【解决方案3】:

不确定您的用例,但我更喜欢将 32 hex 存储为 32 hex(varchar2(32) 而不是 raw(16))。只是避免了不断的 hextoraw/rawtohex 转换,并且其他应用程序也更容易使用。

无论如何,在 Oracle 方面,您可以尝试将其插入原始字段(即时转换),并捕获任何 ORA-01465 异常(无效的十六进制数):

insert into my_table(my_raw_field) values (hextoraw(some_hex_variable));

【讨论】:

  • 我想在去数据库之前检查一下。这将是一个预检查机制。
猜你喜欢
  • 1970-01-01
  • 2016-10-24
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多