📄 databaseserverview.cpp
字号:
//删除
sSql.Format("DELETE FROM %s WHERE Name = '%s'",tableName,Name);
database.ExecuteSQL(sSql);
//使用完这个数据库之后,关闭数据库以及记录集
if(recordset.IsOpen())
{
recordset.Close();
}
if(database.IsOpen())
{
database.Close();
}
//刷新列表
RefreshList();
}
void CDatabaseServerView::OnModifyRecord()
{
if(m_nSelected==-1)
{
AfxMessageBox("尚未选择要修改的记录!请先选择。");
return;
}
CString Name,Address,Phone;
Name=m_ctrlListData.GetItemText(m_nSelected,0);
Address=m_ctrlListData.GetItemText(m_nSelected,1);
Phone=m_ctrlListData.GetItemText(m_nSelected,2);
CRecordDlg Dialog1;
Dialog1.m_strName=Name;
Dialog1.m_strAddress=Address;
Dialog1.m_strPhone=Phone;
if(Dialog1.DoModal()==IDCANCEL)
{
return;
}
//修改记录
CDatabase database;
CRecordset recordset;
CString tableName;
CString sSql;
CString Temp;
//打开数据库
TRY
{
sSql.Format("DSN=%s;;","Contact");
database.OpenEx(sSql,CDatabase::noOdbcDialog);
}
CATCH(CDBException, e)
{
//错误代码为e->m_nRetCode
}
END_CATCH
recordset.m_pDatabase=&database;
tableName="Contact";
//查找这个记录是否存在
recordset.m_strFilter="";
sSql.Format("SELECT * FROM %s WHERE Name = '%s'",tableName,Name);
recordset.Open(CRecordset::dynaset,sSql);
if(recordset.IsBOF()&&recordset.IsEOF())
{
//不存在,无法修改
AfxMessageBox("该记录不存在,无法修改!");
//使用完这个数据库之后,关闭数据库以及记录集
if(recordset.IsOpen())
{
recordset.Close();
}
if(database.IsOpen())
{
database.Close();
}
return;
}
else
{
}
//修改
sSql.Format("UPDATE %s SET Name= '%s',Address = '%s',Phone = '%s' WHERE Name = '%s'",tableName,Name,Dialog1.m_strAddress,Dialog1.m_strPhone,Name);
database.ExecuteSQL(sSql);
//使用完这个数据库之后,关闭数据库以及记录集
if(recordset.IsOpen())
{
recordset.Close();
}
if(database.IsOpen())
{
database.Close();
}
//刷新列表
RefreshList();
}
void CDatabaseServerView::OnDestroy()
{
CFormView::OnDestroy();
m_pServer->UnInit();
delete m_pServer;
}
void CDatabaseServerView::OnStartServer()
{
if(!m_bServerStarted)
{
m_pServer->Init(OnDataArrive,888,(DWORD)this);
m_bServerStarted=TRUE;
SetDlgItemText(IDC_START_SERVER,"停止服务器");
}
else
{
m_pServer->UnInit();
m_bServerStarted=FALSE;
SetDlgItemText(IDC_START_SERVER,"开始服务器");
}
}
void CDatabaseServerView::OnDataArrive(unsigned long sIP, SOCKET sClient, char * pData, unsigned long DataLength,DWORD userdata)
{
CDatabaseServerView* pWnd=(CDatabaseServerView*)userdata;
DWORD inf[2];
inf[0]=DataLength;
inf[1]=sClient;
pWnd->SendMessage(WM_NET_DATA_ARRIVE,(WPARAM)pData,(LPARAM)&inf);
}
LONG CDatabaseServerView::OnDataArrivedMsg(WPARAM wParam,LPARAM lParam)
{
DWORD inf[2];
memcpy(&inf,(DWORD*)lParam,2*sizeof(DWORD));
//m_pServer->SendMsg((SOCKET)inf[1],(char*)wParam,inf[0]);
CString Data;
Data=CString((char*)wParam).Left(inf[0])+"\r\n";
//判断是否是合格的请求语句("Request:"开头)
//1.Request:A-----添加记录
//2.Request:M-----修改记录
//3.Request:D-----删除记录
//4.Request:Q-----查询记录
//后面跟SQL语句
if(Data.Left(8)!="Request:")
{
return 0;
}
//进行数据库操作
CString sSql;
/*
if(Data.Left(9).Right(1)=="A")
{
//增加记录
}
if(Data.Left(9).Right(1)=="M")
{
//修改记录
}
if(Data.Left(9).Right(1)=="D")
{
//删除记录
}
*/
sSql=Data.Right(Data.GetLength()-9);
//操作数据库
CDatabase database;
CRecordset recordset;
CString tableName;
CString sSql1("SELECT * FROM Contact");
CString Temp;
//打开数据库
TRY
{
sSql1.Format("DSN=%s;;","Contact");
database.OpenEx(sSql1,CDatabase::noOdbcDialog);
}
CATCH(CDBException, e)
{
//错误代码为e->m_nRetCode
}
END_CATCH
recordset.m_pDatabase=&database;
//操作
TRACE(sSql+"\r\n");
database.ExecuteSQL(sSql);
//使用完这个数据库之后,关闭数据库以及记录集
if(recordset.IsOpen())
{
recordset.Close();
}
if(database.IsOpen())
{
database.Close();
}
//刷新列表
RefreshList();
AddMessage(sSql);
return 1;
}
void CDatabaseServerView::AddMessage(LPCTSTR msg)
{
CString Message;
//服务器
GetDlgItemText(IDC_EDIT_SERVER_LOG,Message);
Message+=msg;
SetDlgItemText(IDC_EDIT_SERVER_LOG,Message);
m_ctrlEditServerLog.SetSel(Message.GetLength(),Message.GetLength());
}
//获得本地计算机名称
int CDatabaseServerView::GetLocalHostName(CString &sLocalName)
{
char szLocalName[256];
int nRetCode;
nRetCode=gethostname(szLocalName,sizeof(szLocalName));
if(nRetCode!=0)
{
//产生错误
sLocalName=_T("没有取得");
return GetLastError();
}
sLocalName=szLocalName;
return 0;
}
//获得本机IP地址
int CDatabaseServerView::GetIpAddress(const CString &sLocalName, CString &sIpAddress)
{
struct hostent FAR * lpHostEnt=gethostbyname(sLocalName);
if(lpHostEnt==NULL)
{
//错误
sIpAddress=_T("");
return GetLastError();
}
//获取IP地址
LPSTR lpAddr=lpHostEnt->h_addr_list[0];
if(lpAddr)
{
struct in_addr inAddr;
memmove(&inAddr,lpAddr,4);
//转换为标准格式
sIpAddress=inet_ntoa(inAddr);
if(sIpAddress.IsEmpty())
{
sIpAddress=_T("没有取得");
}
}
return 0;
}
void CDatabaseServerView::SendBack()
{
//将结果集返回给客户端
CString Data;
CMarkup *m_pXML;
m_pXML=new CMarkup(_T("<?xml version=\"1.0\"?>\r\n<xml/>\r\n"));
//写入记录
//这里仅做测试使用这种写法和格式,根据自己的业务流程可以修改这里
//写入字段表头结构
m_pXML->ResetPos();
m_pXML->FindElem();
m_pXML->AddChildElem("Schema");
m_pXML->IntoElem();
m_pXML->AddChildElem("Table");
m_pXML->IntoElem();
m_pXML->AddChildElem("Field");
m_pXML->IntoElem();
m_pXML->AddAttrib("Name","Name");
m_pXML->OutOfElem();
m_pXML->AddChildElem("Field");
m_pXML->IntoElem();
m_pXML->AddAttrib("Name","Address");
m_pXML->OutOfElem();
m_pXML->AddChildElem("Field");
m_pXML->IntoElem();
m_pXML->AddAttrib("Name","Phone");
m_pXML->ResetPos();
m_pXML->FindElem();
//写入数据记录
m_pXML->AddChildElem("Data");
m_pXML->IntoElem();
//操作数据库
CDatabase database;
CRecordset recordset;
CString tableName;
CString sSql1("SELECT * FROM Contact");
CString Temp;
//打开数据库
TRY
{
sSql1.Format("DSN=%s;;","Contact");
database.OpenEx(sSql1,CDatabase::noOdbcDialog);
}
CATCH(CDBException, e)
{
//错误代码为e->m_nRetCode
}
END_CATCH
recordset.m_pDatabase=&database;
tableName="Contact";
//查找记录
recordset.m_strFilter="";
sSql1.Format("SELECT * FROM %s",tableName);
recordset.Open(CRecordset::dynaset,sSql1);
if(recordset.IsBOF()&&recordset.IsEOF())
{
//AfxMessageBox("没有记录!");
}
else
{
int nDataTotal=0;
CString Temp;
recordset.MoveFirst();
while(!recordset.IsEOF())
{
if(nDataTotal>0)
{
m_pXML->OutOfElem();
}
m_pXML->AddChildElem("Record");
m_pXML->IntoElem();
recordset.GetFieldValue((short)1,Temp);
m_pXML->AddAttrib("Name",Temp);
recordset.GetFieldValue((short)2,Temp);
m_pXML->AddAttrib("Address",Temp);
recordset.GetFieldValue((short)3,Temp);
m_pXML->AddAttrib("Phone",Temp);
nDataTotal++;
recordset.MoveNext();
}
}
//使用完这个数据库之后,关闭数据库以及记录集
if(recordset.IsOpen())
{
recordset.Close();
}
if(database.IsOpen())
{
database.Close();
}
Data=m_pXML->GetDoc();
if(m_bServerStarted)
{
m_pServer->SendMsgToAll((char*)Data.GetBuffer(0),Data.GetLength());
}
delete m_pXML;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -