如何将System.Data.OracleClient中的双精度和日期迁移到ODP.NET?

时间:2011-11-11 11:58:37

标签: c# oracle ado.net odp.net system.data.oracleclient

这种迁移似乎非常具有挑战性。我现在要做的是对oracle db表执行简单查询:

OBJECTID NOT NULL NUMBER,
DOUBLEVALUE NOT NULL FLOAT(126),
MODTIME DATE

当我使用System.Data.OracleClient时,我可以插入参数值为的​​参数化查询:

123, 
"123.123", 
DateTime.Now.ToString(). 

和DbParameter.DbTypes是:

DbType.Int32,
DbType.Double,
DbType.Date

如果我使用Oracle.DataAccess.Client,则无效:

对于DOUBLEVALUE,我得到异常,因为在我的系统中,Convert.ToDouble(由OracleParameter.PreBind_Double调用)期望我使用逗号(“123,123”)。我不想更改所有程序和文件中的所有值。 OleDb也可以毫无问题地处理这个问题。

对于MODTIME,我得到“ORA-01830:日期格式图片在转换整个输入字符串之前结束。”如果我将值更改为DateTime.Now.ToShortDateString(),则此方法有效。如果我改变参数类型也可能。这个OleDb也可以处理。

Oracle.DataAccess.Client无法处理System.Data.OracleClient和System.Data.OleDb没有问题的这些基本情况,这似乎很荒谬。有什么建议吗?

谢谢&最好的问候-Matti

1 个答案:

答案 0 :(得分:0)

您使用逗号的问题来自您的处理线程使用的默认文化。尝试强迫美国文化:

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");