C#.net核心与Oracle集合编码

C#.net核心与Oracle集合编码,c#,oracle,unicode,ado.net,.net-core,C#,Oracle,Unicode,Ado.net,.net Core,在.Net Core上的web api项目中,已通过dotNetCore.data.OracleClient(nugget软件包)连接到OracleDB 我从流水线funxction读取数据,如下所示: using (DbConnection connection = new OracleConnection("oraclecs")) { connection.Open(); using (var cmd = connection.CreateCommand()) {

.Net Core
上的web api项目中,已通过
dotNetCore.data.OracleClient(nugget软件包)连接到
Oracle
DB

我从流水线funxction读取数据,如下所示:

 using (DbConnection connection = new OracleConnection("oraclecs")) {
    connection.Open();

    using (var cmd = connection.CreateCommand()) {
      cmd.CommandType = CommandType.Text;

      cmd.CommandText = "select name from Table(SCHEMA.PACKAGE.FUNC(PARAM1=>1,PARAM2=>4))";

      DbDataReader er = cmd.ExecuteReader();
      while (er.Read()) {
        string Name = er.GetValue(er.GetOrdinal(name: "name")).ToString();
      }
      connection.Close();
    }
  }
俄语数据库中的名称 DB编码
NLS_字符集
is
CL8MSWIN1251

当我从字段
name
中获取值时,我看到了什么????????而不是真实姓名

还可以通过Oracle SQL Developer在命令文本中选择
,返回正确的数据

有什么能帮我修复它吗?

谢谢你的帮助

运行在docker中的.net核心web api

我已经在docker-compose.override.yml文件中设置了NLS_LANG=.CL8MSWIN1251 这对我很有帮助

我的docker-compose.override.yml文件:

version: '3'

services:
  api:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ORACLE_CS=Data Source = ip:port/sid;PERSIST SECURITY INFO=True;USER ID=user; Password=password;
      - NLS_LANG=.CL8MSWIN1251
    ports:
      - "5050:80"
networks:
  default:
    external:
      name: nat

你在哪里看到了价值?我希望无论您在什么地方查看结果,都无法显示这些字符字段的类型是什么?在任何情况下,都不要使用ASCII字段(即varchar),而是使用Unicode字段(即varchar2),这样您就不必担心在我使用的db中进行编码varchar2@PanagiotisKanavos,
varchar
varchar2
相同。我想你的意思是
Nvarchar2
——但是这并不能解决问题。再说一次,你在Oracle SQL Developer中的设置根本不重要!转到您的环境设置并设置
NLS_LANG=.CL8MSWIN1251
(包括点!),然后运行.net应用程序。