我想从Oracle数据库导入一些数据,但我不想在宏上留下密码,因为它很容易访问。然后我发现这段代码隐藏了我的连接字符串,这种方法非常好,至少在我的电脑上是这样。我创建了一个.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
答案 0 :(得分:1)
听起来像dll只安装在你的机器上。引用列表中的项目不会导入和/或存储在VBA中。它们需要存在于每台主机上。
我不确定隐藏的连接字符串是个好主意。 Security by obscurity通常是气馁的,因为任何愿意投入足够时间的人都可以绕过它。
此设计还使用共享UID和PWD。每个用户共享一个帐户,您就无法审核谁做了什么。
如果可能,我总是建议为每个用户提供自己的帐户。