编译错误:对象库无效或包含对无法找到的对象定义的引用



我想从Oracle数据库中导入一些数据,但是我不想将密码留在宏上,因为它很容易访问。然后,我找到了这个代码来隐藏我的连接字符串,至少在我的PC上效果很好。我创建了下一个代码的.dll,以便用户无法使用数据库数据。

using ADODB;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace HiddenConnectionString
{ 
  [InterfaceType(ComInterfaceType.InterfaceIsDual),
  Guid("2FCEF713-CD2E-4ACB-A9CE-E57E7F51E72E")]
  public interface IMyServer
{
    Connection GetConnection();
    void Shutdown();
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("57BBEC44-C6E6-4E14-989A-B6DB7CF6FBEB")]
public class MyServer : IMyServer
{
    private Connection cn;
  
    private string cnStr = "Provider=MSDAORA.1;Password=YourPass;User ID=YourID;Data Source=IP:Port";
    public MyServer)(
    {
    }
    public Connection GetConnection()
    {
        cn = new Connection();
        cn.ConnectionString = cnStr;
        cn.Open();
        return cn;
    }
    public void Shutdown()
    {
        cn.Close();
    }
}
}

下一个代码是我要运行的代码:

Option Explicit
Sub Main()
Dim myCn As MyServer
Set myCn = New MyServer
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

'Consumos
rs.Open "select * from tablename, myCn.GetConnection

Sheets.Add After:=ActiveSheet
Range("A2").CopyFromRecordset rs

rs.Close
myCn.Shutdown
Set rs = Nothing
Set myCn = Nothing
End Sub

我一直在尝试使其在其他计算机上工作,但是当我在它们上运行测试代码时,我会遇到此错误:

编译错误:对象库无效或包含对无法找到的对象定义的引用

因此,似乎库库尚未导入,但是当我检查参考列表时,我是" hiddenconnectionstring.dll"。被激活,所以我不知道发生了什么。

有人可以给我一些有关如何使它起作用的建议吗?欢迎任何帮助。谢谢:D

听起来像DLL仅安装在计算机上。参考列表中的项目未导入和/或存储在VBA中。他们需要在每个主机机器上存在。

我不确定隐藏的连接字符串是一个好主意。通常,愿意默默无闻的安全性,因为任何愿意投入足够的时间的人都可以绕过它。

此设计还使用共享的UID和PWD。在每个用户共享一个帐户时,您将失去审核的能力。

在可能的情况下,我总是建议为每个用户提供自己的帐户。

相关内容

最新更新