【问题标题】:Should I use OracleClient or ADODB to connect to an Oracle Database using c#?我应该使用 OracleClient 还是 ADODB 来使用 c# 连接到 Oracle 数据库?
【发布时间】:2021-01-14 17:42:45
【问题描述】:

我正在尝试使用 c# 连接到 Oracle 数据库。我看到我有两个选择: using System.Data.OracleClient; 要么 using ADODB;

我对 MySQL 很熟悉,这就是为什么我更容易理解和使用 OracleClient 的原因。但是,我看到当我使用它时,c# 说它已被弃用。这让我想知道我的 OracleClient 代码在 1-2 年后是否还能正常工作。

我该怎么办?

以下是我使用 OracleClient 的代码:

public class DataHelper
    {
        public OracleConnection connection;
        String connectionString;

        public DataHelper()
        {
            connectionString = "this should be connection string";
            
            connection = new OracleConnection(connectionString);
        }

        public List<Machine> GetAllMachines()
        {
            List<Machine> temp= new List<Machine>();
            using (OracleConnection connection = new OracleConnection(connectionString))
            {
                string queryString = "SELECT * FROM MACHINES";
                OracleCommand command = new OracleCommand(queryString);
                try
                {
                    command.Connection = connection;
                    connection.Open();
                    command.CommandType = CommandType.Text;
                    //command.ExecuteNonQuery();
                    OracleDataReader reader = command.ExecuteReader();
                    int machineNr, nrOfLinesPerCm;
                    double cycleTime, currentTime, heightOfLamallae;
                    string machineType;
                    while (reader.Read())
                    {
                        machineNr = Convert.ToInt32(reader["MACHINE_NR"]);
                        cycleTime = Convert.ToDouble(reader["CYCLE_TIME"]);
                        currentTime = Convert.ToDouble(reader["CURRENT_TIME"]);
                        machineType = Convert.ToString(reader["TYPE"]);
                        nrOfLinesPerCm = Convert.ToInt32(reader["NR_OF_LINES_PER_CM"]);
                        heightOfLamallae = Convert.ToDouble(reader["HEIGHT_OF_LAMALLAE"]);
                        temp.Add(new Machine(machineNr, cycleTime, currentTime, nrOfLinesPerCm, heightOfLamallae, machineType));
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    connection.Close();
                }
            }
            return temp;
        }
        
    } 

如果您推荐 ADODB,您将如何使用它来实现它?

【问题讨论】:

    标签: c# database adodb oracleclient


    【解决方案1】:

    你也不应该使用,ADODB 是一个 COM 古老的库,你知道 System.Data.OracleClient 已被弃用,它需要安装 Oracle 本地客户端。

    您应该在 .Net Framework 上使用 Oracle.ManagedDataAccess,在 .net core 上使用 Oracle.ManagedDataAccess.Core。这两个库都不依赖本机库。只需安装 nuget 包,它就可以在任何分别具有 .Net Framework 或 .net 核心的机器上运行。

    【讨论】:

      【解决方案2】:

      Oracle 客户端并未被弃用,但您的却被弃用。您可以从 Nuget 下载 Oracle.ManagedDataAccess(适用于 .Net)或 Oracle.ManagedDataAccess.Core(适用于 .Net Core)。这些是独立客户端,不需要安装本机客户端。

      【讨论】:

      • 我从 (nuget.org/packages/oracle.manageddataaccess) 安装了 Oracle.ManagedDataAccess (for .Net),但是当我打开它时它给了我这个错误:这个应用程序没有与之关联的应用程序用于执行此操作。请安装应用程序,或者如果已安装,请在默认应用程序设置页面中创建关联。 我已经安装了 Visual Studio .NET Framework,它是默认设置。我该如何解决这个问题? @jesuslopez
      猜你喜欢
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多