我目前正面临一个烦人的问题,很乐意得到一些见解。
我正在开发一个简单的应用程序,它从 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 的客户端不读取路径或注册表配置...