conn.ConnectionString = "UID=" & UID & ";PWD=" & PWD & ";DSN=" & DSN & _ ";Application Name = MyApp"
如何设置应用程序名称以进行监视?
解决方法@H_502_8@
啊,我看到VBA连接字符串不支持Application Name属性.在VBA中使用时,它根本无法被识别.我能想到解决这个问题的唯一方法就是从COM C#库返回一个ADODB.Connection对象.
您自己的COM库将返回一个带有预定义连接字符串的ADODB.Connection对象,该字符串似乎在.NET中有效.您将使用VBA ADODB.Connection对象连接到数据库,但使用替换的对象引用.代替
设置cn = new ADODB.Connection,您将使用由您自己的库公开的GetConection()方法.
Dim cn as ADODB.Connection
Set cn = yourCOMlibrary.GetConnection
这是步骤
下载并安装Visual Studio Express for Windows (FREE)
以管理员身份打开它并创建一个新项目.选择Visual C#,然后选择Class Library并将其重命名为MyConnection
在Solution Explorer中,将Class1.cs重命名为ServerConnection.cs
在Solution Explorer中右键单击MyConnection项目,然后选择Add Reference
在搜索框中键入activeX并勾选Microsoft ActiveX Data Objects 6.1 Library
将以下代码复制并粘贴到ServerConnection.cs中,完全替换文件中的内容.
using System;
using System.Runtime.InteropServices;
using System.IO;
using ADODB;
namespace MyConnection
{
[InterfaceType(ComInterfaceType.InterfaceIsDual),Guid("32A5A235-DA9F-47F0-B02C-9243315F55FD")]
public interface INetConnection
{
Connection GetConnection();
void Dispose();
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("4E7C6DA2-2606-4100-97BB-AB11D85E54A3")]
public class ServerConnection : INetConnection,IDisposable
{
private Connection cn;
private string cnStr = "Provider=sqlOLEDB; Data Source=SERVER\\DB; Initial Catalog=default_catalog; User ID=username; Password=password;Application Name=MyNetConnection";
public Connection GetConnection()
{
cn = new Connection();
cn.ConnectionString = cnStr;
return cn;
}
public void Dispose()
{
cn = null;
GC.Collect();
}
}
}
在代码中找到cnStr变量并更新连接字符串详细信息.
注意:如果您不确定应该使用的连接字符串,请参阅ALL CONNECTION STRINGS
单击Visual Studio中的TOOL和CREATE GUID
将GUID替换为您自己的GUID并删除花括号,使它们的格式与您从复制的代码中看到的格式相同
在Solution Explorer中右键单击MyConnection,然后选择Properties.
单击左侧的Application选项卡,然后单击Assembly Info并勾选Make Assembly COM-Visible
单击左侧菜单中的* Build *并勾选Register for COM Interop
注意:如果您正在为64位Office开发,请确保将Build菜单上的Platform Target更改为x64!这对于64位Office COM库是必需的,以避免任何与ActiveX相关的错误.
在解决方案资源管理器中右键单击MyConnection,然后从菜单中选择“构建”.
如果一切正常,那么应该成功生成MyConnection.dll和MyConnection.tlb.现在去这条路
C:\Users\username\desktop\
或者你保存的地方
你应该看到你的文件.
现在打开Excel并转到VBE.单击工具,然后选择参考.
单击“浏览”按钮并导航到MyConnection.tlb.
此外,添加对Microsoft ActiveX Object 6.1库的引用 – 这样您就可以使用ADODB库.
现在右键单击Project Explorer窗口中的任意位置并插入一个新模块
将以下代码复制并粘贴到其中
Option Explicit
Sub Main()
Dim myNetConnection As ServerConnection
Set myNetConnection = New ServerConnection
Dim cn As ADODB.Connection
Set cn = myNetConnection.GetConnection
cn.Open
Application.Wait (Now + TimeValue("0:00:10"))
cn.Close
Set cn = Nothing
myNetConnection.Dispose
End Sub
打开sql Server Management Studio,右键单击服务器并选择“活动监视器”
不要关闭这个窗口
返回Excel并点击F5或点击功能区上的绿色播放按钮.
您自己的COM库将返回一个带有预定义连接字符串的ADODB.Connection对象,该字符串似乎在.NET中有效.您将使用VBA ADODB.Connection对象连接到数据库,但使用替换的对象引用.代替
设置cn = new ADODB.Connection,您将使用由您自己的库公开的GetConection()方法.
Dim cn as ADODB.Connection Set cn = yourCOMlibrary.GetConnection
这是步骤
下载并安装Visual Studio Express for Windows (FREE)
以管理员身份打开它并创建一个新项目.选择Visual C#,然后选择Class Library并将其重命名为MyConnection
在Solution Explorer中,将Class1.cs重命名为ServerConnection.cs
在Solution Explorer中右键单击MyConnection项目,然后选择Add Reference
在搜索框中键入activeX并勾选Microsoft ActiveX Data Objects 6.1 Library
将以下代码复制并粘贴到ServerConnection.cs中,完全替换文件中的内容.
using System; using System.Runtime.InteropServices; using System.IO; using ADODB; namespace MyConnection { [InterfaceType(ComInterfaceType.InterfaceIsDual),Guid("32A5A235-DA9F-47F0-B02C-9243315F55FD")] public interface INetConnection { Connection GetConnection(); void Dispose(); } [ClassInterface(ClassInterfaceType.None)] [Guid("4E7C6DA2-2606-4100-97BB-AB11D85E54A3")] public class ServerConnection : INetConnection,IDisposable { private Connection cn; private string cnStr = "Provider=sqlOLEDB; Data Source=SERVER\\DB; Initial Catalog=default_catalog; User ID=username; Password=password;Application Name=MyNetConnection"; public Connection GetConnection() { cn = new Connection(); cn.ConnectionString = cnStr; return cn; } public void Dispose() { cn = null; GC.Collect(); } } }
在代码中找到cnStr变量并更新连接字符串详细信息.
注意:如果您不确定应该使用的连接字符串,请参阅ALL CONNECTION STRINGS
单击Visual Studio中的TOOL和CREATE GUID
将GUID替换为您自己的GUID并删除花括号,使它们的格式与您从复制的代码中看到的格式相同
在Solution Explorer中右键单击MyConnection,然后选择Properties.
单击左侧的Application选项卡,然后单击Assembly Info并勾选Make Assembly COM-Visible
单击左侧菜单中的* Build *并勾选Register for COM Interop
注意:如果您正在为64位Office开发,请确保将Build菜单上的Platform Target更改为x64!这对于64位Office COM库是必需的,以避免任何与ActiveX相关的错误.
在解决方案资源管理器中右键单击MyConnection,然后从菜单中选择“构建”.
如果一切正常,那么应该成功生成MyConnection.dll和MyConnection.tlb.现在去这条路
C:\Users\username\desktop\
或者你保存的地方
你应该看到你的文件.
现在打开Excel并转到VBE.单击工具,然后选择参考.
单击“浏览”按钮并导航到MyConnection.tlb.
此外,添加对Microsoft ActiveX Object 6.1库的引用 – 这样您就可以使用ADODB库.
现在右键单击Project Explorer窗口中的任意位置并插入一个新模块
将以下代码复制并粘贴到其中
Option Explicit Sub Main() Dim myNetConnection As ServerConnection Set myNetConnection = New ServerConnection Dim cn As ADODB.Connection Set cn = myNetConnection.GetConnection cn.Open Application.Wait (Now + TimeValue("0:00:10")) cn.Close Set cn = Nothing myNetConnection.Dispose End Sub
打开sql Server Management Studio,右键单击服务器并选择“活动监视器”
不要关闭这个窗口
返回Excel并点击F5或点击功能区上的绿色播放按钮.