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 + -
显示快捷键?