我有一个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",这完全有道理。
我的问题是,我能做到吗?我应该采取不同的方法吗?希望我只是遗漏了一些明显的东西,因为我喜欢这种方法是多么简单。
当您需要指向返回oracle连接对象的属性时,您正试图引用整个lib对象。这应该能解决问题。
var cmd = new OracleCommand { Connection = dbConn.OraConn};