如何将Oracle二进制(OracleDbType.Raw)转换为GUID

3

我的代码如下:

OracleCommand cmd = CreateCommand(query, connection);

cmd.Parameters.Add(new OracleParameter(parameter, OracleDbType.Raw, ParameterDirection.ReturnValue));

OracleDataAdapter oda = new OracleDataAdapter(cmd);
var result = cmd.ExecuteNonQuery();
var v = cmd.Parameters[parameter].Value
value =new Guid(v as byte[]);
if (result == 1)
{
    return true;
}
else
{
    return false;
}

它不能正常工作。

我认为问题在于转换为byte[]时无法正常工作。

有人能帮帮我吗?

在T.S的帮助下,我使其正常工作并更正了我的代码,如下所示:

  var op = new OracleParameter(parameter, OracleDbType.Raw,32, ParameterDirection.ReturnValue);
            op.Size = 32;
            cmd.Parameters.Add(op);

感谢 T.S。

你能把鼠标放在 v 上告诉我,那是什么类型吗? - T.S.
它说二进制,仅此而已。 - Joon w K
它说的是Oracle二进制文件。已经更正。 - Joon w K
GUID是如何生成的?在C#中,GUID在将它们转换为字节方面具有一些“有趣”的行为 - 因此,如何反序列化它们的解决方案部分取决于您如何对它们进行序列化。 - mjwills
2个回答

1

我得到的数组长度是1(byte[1]),但它需要16(byte[16])。 - Joon w K
@JoonwK 请设置您参数的大小。 - T.S.
如何设置它的大小? - Joon w K
@JoonwK,当你看到 new OracleParameter(parameter, OracleDbType.Raw, ParameterDirection.ReturnValue) 时,它可能是另一个构造函数重载,或者你可以声明 OracleParameter p = new . . 然后设置 p.size = 36,最后将其添加到参数集合中。 - T.S.
@JoonwK,请执行以下代码:new OracleParameter(parameter, OracleDbType.Raw, 36, null, ParameterDirection.ReturnValue)。更多信息请参考:https://docs.oracle.com/database/121/ODPNT/OracleParameterClass.htm#i1011683 - T.S.
@JoonwK 很好。享受吧。 - T.S.

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接