gpt4 book ai didi

ado.net - Oracle .NET 数据提供程序和转换

转载 作者:行者123 更新时间:2023-12-02 21:12:22 24 4
gpt4 key购买 nike

我使用 Oracle 的特定数据提供程序 (11g),而不是即将停止使用的 Microsoft 提供程序。我发现 ODP.NET 的一个特点是它对数据类型的挑剔。当 JDBC 和其他 ADO 提供程序只是进行转换并使其工作时,ODP.NET 将抛出无效的转换异常,除非您完全正确。

考虑这段代码:

        String strSQL = "SELECT DOCUMENT_SEQ.NEXTVAL FROM DUAL";

OracleCommand cmd = new OracleCommand(strSQL, conn);
reader = cmd.ExecuteReader();
if (reader != null && reader.Read()) {
Int64 id = reader.GetInt64(0);
return id;
}

由于 ODP.NET 对转换的挑剔,这不起作用。我通常的选择是:

1)检索到 Decimal 并将其返回到 Int64 (我不喜欢这个,因为 Decimal 太过分了,至少有一次我记得读过它已被弃用......)

Decimal id = reader.GetDecimal(0);
return (Int64)id;

2) 或者在 SQL 语句中进行强制转换以确保它适合 Int64,例如 NUMBER(18)

String strSQL = "SELECT CAST(DOCUMENT_SEQ.NEXTVAL AS NUMBER(18)) FROM DUAL";

我喜欢 (2),因为当我的域类型为 Int32 或 Int64 时,我觉得将数字转换为 .NET Decimal 并不干净。我使用过的其他提供商都足够好(智能),可以即时进行转换。

ODP.NET 专家有什么建议吗?

最佳答案

这将适用于您的原始 SQL:

Int64 id = System.Convert.ToInt64(reader.GetValue(0));

关于ado.net - Oracle .NET 数据提供程序和转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2504288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com