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_字符集
isCL8MSWIN1251
当我从字段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应用程序。