【发布时间】:2014-10-15 16:32:27
【问题描述】:
我们有一个 11gr2 表,其中包含 CHAR(16 BYTE) 列。
在 C# 中使用 Microsoft 已弃用的 OracleClient 我可以将包含 C# 字符串绑定变量的参数化查询构建到 OracleType.Char 中。查询有效。
OracleParameter ci = new OracleParameter();
ci.ParameterName = "ci";
ci.OracleType = OracleType.Char;
ci.Value = "A020";
OracleCommand cmd = new OracleCommand(sql, OraConn);
cmd.Parameters.Add(ci);
迁移到 ODP.NET 12.1 使用 OracleDbType.Char 时出现转换错误。
cmd.Parameters.Add(new OracleParameter("cc", OracleDbType.Char).Value = "A020");
我应该使用什么类型的OracleDbType?
【问题讨论】:
-
第一件事:您是否意识到 ODP.NET 默认为按位置绑定,而 MS Oracle 客户端默认为按位置绑定?您可以在 ODP.NET 中设置 BindbyName=true 以获取 OracleClient 行为。请确认这不是您的问题的原因。
-
@Christian - 我可以确认 bindbyvalue 不是问题 - 非常感谢
-
不是“bindbyVALUE”............ 在 OracleClient 中,参数名称就是匹配占位符所需的全部内容。在 ODP.NET 中,创建参数的顺序非常重要。在进行迁移的人中,这是导致此错误的一个非常常见的原因。
-
抱歉记错了 - bindbyname 不是问题
标签: c# oracle11g odp.net oracleclient