在任意目录新建一个.udl文件,双击打开“数据链接属性”对话框,设置完成并单击[确定]之后,打开此.udl文件,即可得连接字符串。如果是Access等文件型数据库,.udl文件会被存储到数据库文件目录下。

可以使用如下批处理自动建立.udl文件并打开“数据链接属性”对话框:
@echo off
fsutil file createnew ConnectionString.udl 0 > NUL
Rundll32.exe "C:\Program Files\Common Files\System\OLE DB\oledb32.dll",
    OpenDSLFile ConnectionString.udl

也可以使用C++编程调用“数据链接属性”对话框:

#import "C:\Program Files\Common Files\System\ado\msado15.dll" rename("EOF", "rsEOF")
#import "C:\Program Files\Common Files\System\OLE DB\oledb32.dll"

int test()
{
	CoInitialize(NULL);

	//_COM_SMARTPTR_TYPEDEF(IDataSourceLocator, __uuidof(IDataSourceLocator));
	//typedef _com_ptr_t<_com_IIID<IDataSourceLocator, 
        //       &__uuidof(IDataSourceLocator)> > IDataSourceLocatorPtr;
	MSDASC::IDataSourceLocatorPtr ptrDataSourceLocator;
	HRESULT hr = ptrDataSourceLocator.CreateInstance(__uuidof(MSDASC::DataLinks));
	if (FAILED(hr))
	{
		printf("Create IDataSourceLocator failure:0x%08X\n",hr);
		return -1;
	}

	//_COM_SMARTPTR_TYPEDEF(_Connection, __uuidof(_Connection));
	//typedef _com_ptr_t<_com_IIID<_Connection, 
        //       &__uuidof(_Connection)> > _ConnectionPtr;
	ADODB::_ConnectionPtr ptrConn=ptrDataSourceLocator->PromptNew();	
	if (ptrConn!=NULL)
	{
		_bstr_t bstr_ConnectionString=ptrConn->ConnectionString;
		char* lpConnectionString=bstr_ConnectionString;

		//得到连接字符串
		cout<<lpConnectionString<<endl;

		ptrConn.Release();
		ptrConn=NULL;
	}

	ptrDataSourceLocator.Release();
	ptrDataSourceLocator=NULL;

	CoUninitialize();
	return 0;
}

关于ADO的一点问题
在Win7 SP1下编译的程序,放在XP,2003等系统上无法运行,提示“无效指针”的解决方法1:

#import "C:\Program Files\Common Files\System\ado\msado15.dll"
//修改为
#import "C:\Program Files\Common Files\System\ado\msado28.tlb"

参考:An ADO-based application that is compiled in Windows 7 SP1 or in Windows Server 2008 R2 SP1 does not run in earlier versions of Windows

方法2:
直接复制XP的msado15.dll过来。


本文链接地址: 自动生成ADO连接字符串的方法
http://qingfengju.com/index.asp?id=320

分类:Win32/C++ 查看次数:7929 发布时间:2013-2-5 14:17:44