-1

我目前正面临一个烦人的问题,很乐意得到一些见解。

我正在开发一个简单的应用程序,它从 oracle 11g 数据库中检索一些记录并显示它们。

我正在使用 ASP.Net core 2 和 System.data.OracleClient 包来执行与数据库的连接。

但是,当我执行简单的选择并检索 varchar2 字段时,如下所示:

// Init connection
var connection = new OracleConnection(connectionString);

// Create query command
OracleCommand cmd = connection.CreateCommand();
cmd.CommandText = "select * from mytable";

// Execute query
var reader = cmd.ExecuteReader();

// Go through all retreived raw and display only the string fields
while (reader.Read()) {
    object[] rawRow = new object[reader.FieldCount];
    foreach(var o in rawRow) {
        if( o is string ){
            // Display the string
        }
    }
}

我用额外的尾随垃圾字符检索字符串,例如:“MYVALUE翙”翙实际上是一个额外的字符,它不存在于存储在数据库中的字段中。当我使用 sql+ 客户端时,我没有得到这个字符。

如果首先怀疑是字符集问题,但由于 char i 是一个额外的字符,并且 value 字段仅包含 ascii char,则不应...

敲响任何人的铃铛?

DBM 甲骨文 11g

NLS_NCHAR_CHARACTERSET AL16UTF16

NLS_CHARACTERSET WE8MSWIN1252

提前致谢

编辑:

客户端:路径和注册中的 Oracle 12C conf(32 位或 64 位):

NLS_LANG FRENCH_FRANCE.WE8MSWIN1252

编辑2:

额外的字符可以改变,得到ꌽ,⌴和其他一些。它确实看起来像一个字符集转换问题,但在连接器级别:(。

编辑3:

我刚刚使用非官方的基于单声道的 oracle 客户端( Mono.Data.OracleClientCore )进行了测试,得到了相同的结果。现在我怀疑它可能是连接器。也许基于 OCI 的客户端不读取路径或注册表配置...

4

1 回答 1

0

Oracle 中的 varchar2 字段将数据存储为字节。因此,为了有效地提取每个值,您可以使用以下数据类型:

1 - 字节

2 - 字符

3 - 字符[]

4 - 整数

您可以查看这个oracle 文档,了解每个 oracle 数据类型如何映射到 .NET

于 2017-10-04T12:52:55.397 回答