2012-06-14 48 views
0

我的问题与此问题非常相似 - Addin parameter for Oracle除了我使用的是Oracle 11g。数据库有VARCHAR(Western European)NVARCHAR(Unicode)数据类型的两个不同字符。企业库dbcommand用于Oracle的AddInParameter方法

db.AddInParameter(cmd, "nationalColumn", DbType.String, "高野") 

数据库中的国家字符集是unicode,因此NVARCHAR列可以容纳这些字符。

我的问题是我如何告诉db.AddInParameter函数,我添加的参数是一个NVARCHAR,而不是它默认情况下假设的VARCHAR。

添加到这一点 - 我使用System.Data.OracleClient的连接到数据库

回答

0

我回答我自己的问题,因为我花了一个星期的时间搞清楚了。 System.Data命名空间不理解它正在处理的列是国家列,除非它明确指定为OracleType.Nvarchar。

为了解决上述情况,我不得不重写AddInParameter函数来添加一个switch case来检查输入的DBType是否是一个String并将其映射到一个OracleType.NVarchar。

HTH

1

你不能编码在西欧编码字符中国。此编码具有有限数量的字符定义,并且不包含中文。

您期望输出什么?我期望或者数据被乱码或者返回一个错误。

+0

数据库中的国家字符集是unicode,因此NVARCHAR列可以容纳这些字符。我的问题是我如何告诉db.AddInParameter函数,我要添加的参数是一个NVARCHAR列,而不是它默认假设的VARCHAR列 – maverick

+0

这是一个完全不同的问题,而不是你问的问题。我不知道答案。我想你需要问一个新问题。 – usr

+0

对不起,如果我没有正确沟通。我会进行编辑。 – maverick

0

您是自己指定参数还是让Enterprise Library尝试找出参数类型? 如果要调用

command.AddInParameter(“parameterName”, value); 

尝试调用的程序,让企业库找出参数,像这样的例子:

DB.ExecuteNonQuery(“PKG_USER.DELETE”, userId); 

的过程需要一个INT参数调用P_ID,但该命令只能传递在参数值中。 EntLib使用参数顺序发送它们。

而且看看

+0

感谢你。这种方法会自动选取DbType.String作为数据类型。所以没有解决问题。很显然,如果主字符集不同,System.Data命名空间隐式不支持National字符集。如果涉及NVARCHAR列,我必须放入使用OracleType的case语句 – maverick