sl330cimdsnmangerdlg.cpp

来自「数据库部署程序」· C++ 代码 · 共 329 行

CPP
329
字号
//SL330CIMDsnManagerDlg.cpp : 实现文件

#include "stdafx.h"
#include "SL330CIMDsnMangerDlg.h"
#include "DBDeployment.h"

#include <lmserver.h>
const DWORD value_max_len = 256;
// CSL330CIMDsnManagerDlg 对话框
extern CDBDeploymentApp theApp;
IMPLEMENT_DYNAMIC(CSL330CIMDsnManagerDlg, CDialog)
CSL330CIMDsnManagerDlg::CSL330CIMDsnManagerDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSL330CIMDsnManagerDlg::IDD, pParent)
{

}

CSL330CIMDsnManagerDlg::~CSL330CIMDsnManagerDlg()
{

}

void CSL330CIMDsnManagerDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_EDIT1, m_dsnNameEdit);
	DDX_Control(pDX, IDC_DB_COMBO, m_dbNameCombo);
	DDX_Control(pDX, IDC_DBSERVER_COMBO, m_dbServerNameCombo);
	DDX_Control(pDX, IDC_CREAT_BUTTON, m_creatBtn);
	DDX_Control(pDX, IDC_CONFIG_BUTTON, m_configBtn);
}


BEGIN_MESSAGE_MAP(CSL330CIMDsnManagerDlg, CDialog)
	ON_BN_CLICKED(IDC_CREAT_BUTTON, &CSL330CIMDsnManagerDlg::OnBnClickedCreatButton)
	ON_BN_CLICKED(IDC_CONFIG_BUTTON, &CSL330CIMDsnManagerDlg::OnBnClickedConfigButton)
END_MESSAGE_MAP()

// 对话框初始化函数
BOOL CSL330CIMDsnManagerDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	InitServerCombo();
	m_dsnNameEdit.SetWindowText(_T("SL330CIM"));
	//m_dsnNameEdit.SetReadOnly(TRUE);
	m_dbNameCombo.SetWindowText(_T("SL330CIM"));
	m_dbNameCombo.EnableWindow(FALSE);
	
	CString serverName;
	if(CheckIsHasSL330CIMSysDsn(serverName))
	{
		//当前数据源SL330CIM存在,创建按钮不可用
		m_creatBtn.EnableWindow(FALSE);
		//服务器下拉框当前值为读取的ServerName
		m_dbServerNameCombo.SetWindowText(serverName);
	}
	else
	{
		//当前数据源SL330CIM不存在,则配置按钮不可用
		m_configBtn.EnableWindow(FALSE);
		//服务器下拉框当前值为默认值(local)
		m_dbServerNameCombo.SetWindowText(_T("(local)"));
	}

	return TRUE;
}

//检查是否已经存在SL330CIM的系统DSN,如果存在则读取SQL Server服务器名并写入serverName
bool CSL330CIMDsnManagerDlg::CheckIsHasSL330CIMSysDsn(CString& serverName)
{
	HKEY   hKey;   
	//TCHAR  tszReg[] = {'S','o','f','t','w','a','r','e','\\','O','D','B','C','\\','O','D','B','C','.','I','N','I','\\','S','L','3','3','0','C','I','M','\0' }; 
	CString subKey("SoftWare\\ODBC\\ODBC.INI\\SL330CIM");
	DWORD  dwLen = value_max_len;

	//判断是否注册表中存在该Key
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,subKey,0,KEY_ALL_ACCESS,&hKey)!=ERROR_SUCCESS)   
	{      
		//如果不存在该Key
		return false;   
	}
	//读取SQL Server服务器名
     DWORD dwType=REG_NONE;
     DWORD dwCount=0;

     //先查询键值的长度。
     LONG lResult = RegQueryValueEx(hKey, _T("Server"), NULL, &dwType,
           NULL, &dwCount);
     if (lResult == ERROR_SUCCESS)
     {         
           //查询键值。
           lResult = RegQueryValueEx(hKey, _T("Server"), NULL, &dwType,
                (LPBYTE)serverName.GetBuffer(dwCount), &dwCount);         
	}
	RegCloseKey(hKey);
	return true;
}

//初始化SQL Server服务器列表下拉框
void CSL330CIMDsnManagerDlg::InitServerCombo()   
{   
	LPSERVER_INFO_101   pBuf   =   NULL;   
	//LPSERVER_INFO_101   pTmpBuf;   
	DWORD   dwLevel   =   101;   
	DWORD   dwPrefMaxLen   =   -1;   
	DWORD   dwEntriesRead   =   0;   
	DWORD   dwTotalEntries   =   0;   
	DWORD   dwTotalCount   =   0;   
	DWORD   dwServerType   =   SV_TYPE_SQLSERVER;//SV_TYPE_SERVER;   //all servers   
	DWORD   dwResumeHandle   =   0;   
	//NET_API_STATUS   nStatus;   
	//LPTSTR   pszServerName   =   NULL;   
	DWORD   i;   
	NetServerEnum( 
		NULL,dwLevel,(LPBYTE *)   &pBuf,   
		dwPrefMaxLen,&dwEntriesRead,   
		&dwTotalEntries,dwServerType,   
		NULL,&dwResumeHandle);
	for(i=0;i<dwEntriesRead;i++)   
	{   
		CString str(pBuf->sv101_name);
		m_dbServerNameCombo.AddString(str);
		pBuf++;//指针移动
	}
}   


// CSL330CIMDsnManagerDlg 消息处理程序
void CSL330CIMDsnManagerDlg::OnBnClickedCreatButton()
{
	
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(); 

	//提示用户是否确定要进行创建
	CString strMe, strServer;
	m_dbServerNameCombo.GetWindowText(strServer);
	strMe.Format(_T("您确定要创建             \nSQL Server服务器名为%s\n数据库名为SL330CIM\n的系统数据源SL330CIM?"),strServer);
	if (MessageBox(strMe, _T("提示信息"), MB_YESNO | MB_ICONQUESTION) == IDNO)
	{
		return;
	}
	//写注册表。   
	HKEY   hKey;   
	DWORD   dwAction;   
	CString subkey("SoftWare\\ODBC\\ODBC.INI\\SL330CIM");   
	DWORD   dwLen;   

	if(RegCreateKeyEx(HKEY_LOCAL_MACHINE,subkey,   
		0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,   
		NULL,&hKey,&dwAction)!=ERROR_SUCCESS)   
	{   
		MessageBox(_T("创建该系统数据源SL330CIM失败."));   
		return;   
	}

	//数据库名称  
	CString databaseStr = _T("SL330CIM");
	dwLen =(databaseStr.GetLength() + 1) * sizeof(TCHAR); 
	if(RegSetValueEx(hKey,_T("Database"),0,REG_SZ,(const BYTE *)databaseStr.GetBuffer(dwLen),   
		dwLen+1)!=ERROR_SUCCESS)
	{
		databaseStr.ReleaseBuffer();
		MessageBox(_T("创建该系统数据源SL330CIM失败."));   
		return;  
	}
	databaseStr.ReleaseBuffer();   

	//默认用户
	CString strUser = _T("sa");
	dwLen = (strUser.GetLength() + 1) * sizeof(TCHAR); 
	if(RegSetValueEx(hKey,_T("LastUser"),0,REG_SZ,(const BYTE *)strUser.GetBuffer(dwLen),
		dwLen+1) != ERROR_SUCCESS)
	{
		strUser.ReleaseBuffer();
		MessageBox(_T("创建该系统数据源SL330CIM失败."));   
		return;  
	}
	strUser.ReleaseBuffer();   

	//服务器地址或名称
	dwLen = (strServer.GetLength() + 1) * sizeof(TCHAR);   
	if(RegSetValueEx(hKey,_T("Server"),0,REG_SZ,(const BYTE *)strServer.GetBuffer(dwLen),
		dwLen+1) != ERROR_SUCCESS)
	{
		strServer.ReleaseBuffer();
		MessageBox(_T("创建该系统数据源SL330CIM失败."));   
		return;  
	}
	strServer.ReleaseBuffer();   

	//数据库驱动
	CString driverStr;
	driverStr = _T("C:\\WINNT\\System32\\SQLSRV32.dll");
	dwLen = (driverStr.GetLength() + 1) * sizeof(TCHAR);
	if(RegSetValueEx(hKey,_T("Driver"),0,REG_SZ,   
		(const BYTE *)driverStr.GetBuffer(dwLen),dwLen+1) != ERROR_SUCCESS)
	{
		driverStr.ReleaseBuffer();
		MessageBox(_T("创建该系统数据源SL330CIM失败."));   
		return;  
	}
	driverStr.ReleaseBuffer();

	//数据库是否采用默认登录
	if(RegSetValueEx(hKey, _T("Trusted_Connection"),0,REG_SZ,(const BYTE*)(_T("Yes")),7)!= ERROR_SUCCESS)
	{
		MessageBox(_T("创建该系统数据源SL330CIM失败."));   
		return; 
	}
	//指定是SQLSERVER数据库,别的可以去注册表里看一看。
	RegCloseKey(hKey); 

	//在数据源记录中添加该Key
	CString subKey1("SoftWare\\ODBC\\ODBC.INI\\ODBC Data Sources");
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,subKey1,   
		0,KEY_ALL_ACCESS,&hKey)!=ERROR_SUCCESS)   
	{   
		MessageBox(_T("注册该系统数据源SL330CIM失败."));   
		return;   
	}

	//新的数据源注册
	CString dsnType = _T("SQL Server");
	dwLen =(dsnType.GetLength() + 1) * sizeof(TCHAR); 
	if(RegSetValueEx(hKey,_T("SL330CIM"),0,REG_SZ,(const BYTE *)dsnType.GetBuffer(dwLen),
		dwLen+1) != ERROR_SUCCESS)  
	{
		dsnType.ReleaseBuffer();
		MessageBox(_T("注册系统数据源SL330CIM失败."));   
		return; 
	}
	dsnType.ReleaseBuffer();

	RegCloseKey(hKey);

	//更改界面按钮状态
	m_creatBtn.EnableWindow(FALSE);
	m_configBtn.EnableWindow(TRUE);
}

void CSL330CIMDsnManagerDlg::OnBnClickedConfigButton()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData();   
	//提示用户是否确定要进行创建
	CString strMe, strServer;
	m_dbServerNameCombo.GetWindowText(strServer);
	strMe.Format(_T("您确定要将当前数据源Sl330CIM的\nSQL Server服务器重新指定为%s?"),strServer);
	if (MessageBox(strMe, _T("提示信息"), MB_YESNO | MB_ICONQUESTION) == IDNO)
	{
		return;
	}
	//写注册表。   
	HKEY   hKey;   
	CString subKey("SoftWare\\ODBC\\ODBC.INI\\SL330CIM");   
	DWORD   dwLen;   

	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,subKey,   
		0,KEY_ALL_ACCESS,&hKey)!=ERROR_SUCCESS)  
	{   
		MessageBox(_T("不能打开该系统数据源Sl330CIM."));   
		return;   
	}
	//数据库名称  
	CString databaseStr = _T("SL330CIM");
	dwLen =(databaseStr.GetLength() + 1) * sizeof(TCHAR); 
	if(RegSetValueEx(hKey,_T("Database"),0,REG_SZ,(const BYTE *)databaseStr.GetBuffer(dwLen),   
		dwLen+1)!=ERROR_SUCCESS)
	{
		databaseStr.ReleaseBuffer();
		RegCloseKey(hKey); 
		MessageBox(_T("配置该系统数据源SL330CIM失败1."));   
		return;  
	}
	databaseStr.ReleaseBuffer();   

	//默认用户
	CString m_user = _T("sa");
	dwLen = (m_user.GetLength() + 1) * sizeof(TCHAR); 
	if(RegSetValueEx(hKey,_T("LastUser"),0,REG_SZ,(const BYTE *)m_user.GetBuffer(dwLen),
		dwLen+1) != ERROR_SUCCESS)
	{
		m_user.ReleaseBuffer();
		RegCloseKey(hKey); 
		MessageBox(_T("配置该系统数据源SL330CIM失败."));   
		return;  
	}
	m_user.ReleaseBuffer();   

	//服务器地址或名称
	CString m_server; 
	m_dbServerNameCombo.GetWindowText(m_server);
	dwLen = (m_server.GetLength() + 1) * sizeof(TCHAR);   
	if(RegSetValueEx(hKey,_T("Server"),0,REG_SZ,(const BYTE *)m_server.GetBuffer(dwLen),
		dwLen+1) != ERROR_SUCCESS)
	{
		m_server.ReleaseBuffer();
		RegCloseKey(hKey); 
		MessageBox(_T("配置该系统数据源SL330CIM失败."));   
		return;  
	}
	m_server.ReleaseBuffer();   

	//数据库驱动
	CString driverStr;
	driverStr = _T("C:\\WINNT\\System32\\SQLSRV32.dll");
	dwLen = (driverStr.GetLength() + 1) * sizeof(TCHAR);
	if(RegSetValueEx(hKey,_T("Driver"),0,REG_SZ,   
		(const BYTE *)driverStr.GetBuffer(dwLen),dwLen+1) != ERROR_SUCCESS)
	{
		driverStr.ReleaseBuffer();
		RegCloseKey(hKey); 
		MessageBox(_T("配置该系统数据源SL330CIM失败."));   
		return;  
	}
	driverStr.ReleaseBuffer();

	//数据库是否采用默认登录
	if(RegSetValueEx(hKey, _T("Trusted_Connection"),0,REG_SZ,(const BYTE*)(_T("Yes")),7)!= ERROR_SUCCESS)
	{
		RegCloseKey(hKey); 
		MessageBox(_T("配置该系统数据源SL330CIM失败."));   
		return; 
	}
	//指定是SQLSERVER数据库,别的可以去注册表里看一看。
	RegCloseKey(hKey); 	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?