[英]Oracle DB not connecting from C# Console App built on net6.0 in Visual Studio Code
确实在很长一段时间后我才开始接触 C#.NET,并意识到发生了很多变化。 此外,我别无选择,只能使用 Visual Studio Code 来开发应用程序。 用例很容易开始; 但是,我一开始就遇到了障碍。
问题:调试器返回ORA-01017:用户名/密码无效; 尽管使用了正确的凭据、格式正确的 TNS 连接字符串和正确的程序集 ( Oracle.ManagedDataAccess.Core ),但登录被拒绝消息。 该项目是一个 SDK 风格的项目,其中程序集由编译器动态注入。
到目前为止我已经尝试过:
我现在正在考虑使用混合方法; ie I'll spin up a Java spring application using JDBC drivers and then invoke the .NET app to parse the complex payloads and return control back to the java layer. 这绝对是一个搞砸的解决方案,使情况变得更糟。 我什至不知道我是否可以重新设计它以便稍后在 AWS Lambda 上运行,尽管我希望将所有内容都写在 C# 中。 太遗憾了。 真的很沮丧。
为什么我首先选择了.NET? 除了 System.Reflection,我还需要 Expando 和 Type Dynamic 库; 虽然反射在 Java 中可用,但前者不是因此没有选择。 我不想逐个编写/维护解析器和 XSD,我想要一个动态解决方案,其中一种方法可以完成所有工作。
有更好的选择吗? 请不要将我指向 Python,鉴于目前的时间表,我没有足够的带宽来学习新的语言。
这是代码片段。
var conStringUser = new OracleConnectionStringBuilder()
{
DataSource = "(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = xxww.db.abc.com)(PORT = 1521)))(CONNECT_DATA =(SID=something)))",
UserID = "xxxxyyyzzz",
Password = "zzzssaaxx",
}.ConnectionString;
using(OracleConnection con = new OracleConnection(conStringUser))
{
using(OracleCommand cmd = con.CreateCommand())
{
try
{
con.Open();
Console.WriteLine("Successfully connected to Oracle Database");
Console.WriteLine();
con.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
多年来,我一直在使用 Oracle DB 和.Net Core 和旧版本,这没有什么秘密,不好的一面只是 Oracle 配置本身哈哈
但这里有一些提示:
不要使用 ODP.NET,而是选择Oracle.ManagedDataAccess.Core ,它由 Oracle 维护,就像任何其他数据库一样即插即用,ODP.NET 是一个糟糕的选择,我是根据经验来告诉你的:)
此外,我一直将这种语法用于 Oracle 连接字符串:
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)));User Id=User;Password=Password;
只需提前 go 并使用此连接字符串创建一个新的OracleConnection
并保证它会正常工作
这是一个要测试的控制台应用程序示例:
using System;
using Oracle.ManagedDataAccess.Client;
namespace SimpleDataAccess
{
class Program
{
static void Main(string[] args)
{
try
{
var connectionString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)));User Id=User;Password=Password;";
using (var conn = new OracleConnection(connectionString))
{
conn.Open();
using (var cmd = new OracleCommand(@"select sysdate from dual", conn))
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine("Date: " + Convert.ToDateTime(reader["sysdate"]));
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.