我有一个DLL来建立Oracle连接,我如何在引用代码中对该连接执行查询

本文关键字:连接 引用 代码 查询 执行 DLL 有一个 建立 Oracle | 更新日期: 2023-09-27 18:24:08

我正在编写一个DLL来处理Oracle数据库连接。我们有几个数据库,都有唯一的密码。我想创建这个DLL,使管理这些连接变得更容易。

我已经这样写DLL:

using System;
using Oracle.DataAccess.Client;
namespace Sabs.DLLs.DBConnectLib
{
    public class DbConnectLib:IDisposable
    {
        public string ConString { get; set; }
        public OracleConnection OraConn { get; set; }
        /// <summary>
        /// Constructor sets the connection string and opens the database connection.
        /// </summary>
        /// <param name="databaseName">The name of the database to connect to.</param>
        public DbConnectLib(string databaseName)
        {
            // Get the connection string
            IConnectionString cs = new ConnectionString();
            ConString = cs.GetConnectionString(databaseName);
            // Open the database connection.
            OraConn = new OracleConnection(ConString);
            try
            {
                OraConn.Open();
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        /// <summary>
        /// Closes the database connection.
        /// </summary>
        public void Dispose()
        {
            try
            {
                OraConn.Close();
            }
            catch (Exception e)
            {
                throw e;
            }
        }
    }
}

它非常简单,只获取连接字符串并在构造函数中打开连接。我使用IDisposable来关闭连接,这样我就可以利用using语句。

现在我正试图在引用这个DLL的代码中执行一个查询,如下所示:

using System;
using Oracle.DataAccess.Client;
using Sabs.DLLs.DBConnectLib;
namespace DBConnectLib_Tester
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var dbConn = new DbConnectLib("pamp"))
            {
                const string SQL = "select distinct owner from sys.all_objects order by owner";
                var cmd = new OracleCommand {Connection = dbConn};
                cmd.CommandText = SQL;
                using (OracleDataReader rdr = cmd.ExecuteReader())
                {
                    while (rdr.Read())
                    {
                        Console.WriteLine(rdr.GetString(0));
                    }
                }
            }
        }
    }
}

这一行var cmd = new OracleCommand {Connection = dbConn};给出了这样的错误"无法将类型"Sabs.DLL.DBConnectLib.DBConnectLib"隐式转换为"Oracle.DataAccess.Client.OracleConnection",这完全有道理。

我的问题是,我能做到吗?我应该采取不同的方法吗?希望我只是遗漏了一些明显的东西,因为我喜欢这种方法是多么简单。

我有一个DLL来建立Oracle连接,我如何在引用代码中对该连接执行查询

当您需要指向返回oracle连接对象的属性时,您正试图引用整个lib对象。这应该能解决问题。

var cmd = new OracleCommand { Connection = dbConn.OraConn};