如题,我的程序是用sql-server数据库来操纵数据的,在发布程序的时候,想做一个自动添加数据库的程序,让用户可以直接运行这个程序,就可以在ODBC里注册数据源并且把数据库加到服务器上,而不必去操作sql-server来实现安装数据库,谢谢各位了!!!!!!
解决方案 »
- Socket error 0 - Directly send error
- 单片机发脉冲的问题
- 编译没有错误而执行有错误
- Month Calendar获得计算机时间的奇怪问题!!!
- 在调试程序的时候,程序怎么会中断到 77fa144b int 3
- 请问COM,COM+,DCOM分别是什么意思?这几个词应该怎么发音?
- 高分:如何在邮件服务器中作邮件内容检测
- vs2005 创建ATL COM Server(Exe)怎么是空的?
- Win32 API与MFC一样吗??
- 怎样编写一个屏保的制作软件?
- CString::Format( _T( "%.100f" ), double )好象有BUG还有什么函数可以把double刑转换成String 么?
- 求教执行错误原因:Debug Assertion Failed!
ODBC数据源的一些信息都存放在注册表中。
HKEY_LOCAL_MECHINE\Software\ODBC\ODBCINST.INI
从此键下可得知系统是否已经安装SQL Server驱动程序
HKEY_LOCAL_MECHINE\Software\ODBC\ODBC.INI
从此键下可得知系统已经建立的数据源.
实现函数如下:
//////////////////////////////////////////////////////////////////
//Function: MakeSQLServerODBCDSN
//
//Purpose: 配置SQL Server数据源
//Parameters:
// [in]
// strDBServer: 数据库所在主机
// strDBName: 数据库名称
// strDSN: 数据源名称
// strUID: 登陆用户
//Return Value:
// -1: 没有安装SQL Server驱动程序
// -2: 其他错误
// 0: 成功
//////////////////////////////////////////////////////////////////
int MakeSQLServerODBCDSN(LPCTSTR strDBServer,LPCTSTR strDBName,LPCTSTR strDSN,LPCTSTR strUID)
{
BOOL bInstallDriver=TRUE;
CRegKey regKey; LONG lRet=regKey.Open(HKEY_LOCAL_MACHINE,"Software\\ODBC\\ODBCINST.INI\\SQL Server");
if(lRet!=ERROR_SUCCESS)
{
bInstallDriver=FALSE;
}
else
{
char szDirverPath[MAX_PATH]="";
DWORD dwCount=100;
lRet=regKey.QueryValue(szDirverPath,"Driver",&dwCount);
if((lRet!=ERROR_SUCCESS)||(dwCount<1))
{
DWORD dwErr=GetLastError();
bInstallDriver=FALSE;
}
regKey.Close();
}
if(!bInstallDriver)
{
return -1;
}
CString strKeyValueName="Software\\ODBC\\ODBC.INI\\";
strKeyValueName+=strDSN;
lRet=regKey.Create(HKEY_LOCAL_MACHINE,strKeyValueName);
if(lRet!=ERROR_SUCCESS)
{
return -2;
}
regKey.SetValue(strDBName,"Database");
regKey.SetValue("SQLSrv32.dll","Driver");
regKey.SetValue(strDBServer,"Server");
regKey.SetValue(strUID,"LastUser");
regKey.m_hKey=HKEY_LOCAL_MACHINE;
regKey.SetKeyValue("Software\\ODBC\\ODBC.INI\\ODBC Data Sources","SQL Server",strDSN);
regKey.Close();
return 0;
}