一、完成的任务
1.参与系统的需求分析
在任何软件系统开始编写之前,系统需求分析都是首先需要完成的内容,这关系到软件的整体功能、结构以及方法,它是整个项目中必不可少的环节。
经过分析:按照结构功能,系统分为数据库服务器,策略机服务器,通讯机服务器。其中,数据库服务器处于中枢地位,独立的和策略机、通讯机服务器通讯。
其中数据库服务器功能有:
1.存储策略机和通信机的数据,分析数据并建表。
2.与策略机的通信,根据通信需要对数据库进行读、写、更新及删除数据的操作;
3.与通信机的通信,根据通信需要对数据库进行读、写、更新及删除数据的操作。
4.备份数据库。
2.参与数据库方案制定
根据通信策略服务的功能特点,数据库功能主要分为与策略机的通信和与通讯机的通信两个模块。
(1)与通讯机的通信模块
(2)与策略机的通信模块
3.参与数据库表的创建
根据系统结构及功能,基于冗余性等数据库表创建规则,完成数据库表的创建。4.参与系统程序流程图的绘制
在以上基础上,根据系统功能,分析软件结构,绘制数据库服务器软件流程图。5.数据库服务器程序的编写与测试
编写数据库服务器整体结构程序、同步程序以及与数据库与通讯机通讯程序。
6.软件的整体打包和系统服务控制器
使用vs自带的“安装部署工具”和setupfactory打包软件,并编写服务控制器程序,修改ip与控制系统服务状态。
二、所学到的知识点
1.MySQL数据库
1) MySQL 语句:
(1)创建数据库
create DATABASE database-name
(2)删除数据库
drop database dbname
(3)创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
(4)删除新表
Drop table tablename;
(5)增加一个列
Alter table tabname add column col type
(6)添加主键: Alter table tabname add primary key(col)
(7)创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
(8)创建视图:create view viewname as select statement
删除视图:drop view viewnamemysql下载的vs库放在那个文件里
(9)说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙
排序:select * from table1 order by field1,field2 [desc]
总数:select count * as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
实际应用中,select语句使用比较频繁,而且也极为复杂,有时难以处理,需要在软件上采取其他方法。
2) C#中使用MySQLDriverCS连接MySQL数据库
MySQLDriverCS是MySQL提供的一种驱动连接包,在MySQLDriverCS安装文件夹下面到MySQLDriver.dll,安装完成后将MySQLDriver.dll添加引用到项目中。并时在程序命名空间中添加"using MySQLDriverCS; "即可。
值得注意的是,MySQL与数据库的连接次数不能过于频繁,即应该避免“短时间多次与数据库连接”,否则会出现exception。
(1)从数据库中读数据
ArrayList pidlist = new ArrayList();//建立链表对象
MySQLConnection mc = new MySQLConnection();
mc = new MySQLConnection(new MySQLConnectionString(“localhost”,“mysql”,“root”,”password”).AsString);//连接数据库
try
{
mc.Open();//打开连接
MySQLCommand firstCmd = new MySQLCommand("set names gb2312",mc); //设置字符格式,防止出现中文乱码
firstCmd.ExecuteNonQuery();
string CommandText = "select NodeID,ParentID,NodeName,NodeSeries from nodeinfo";
MySQLCommand SecondCmd = new MySQLCommand(CommandText,mc);//声明一个MysqlCommand变量,该变量用于执行数据库命令
SecondCmd.ExecuteNonQuery();//执行命令,向表中添加节点信
MySQLDataReader msdr;//该变量用于存储从数据库中读取的值
msdr = SecondCmd.ExecuteReaderEx();//从数据库中访问数据,将返回值赋给msdr
while (msdr.Read())
{
int id = msdr.GetInt16(0);
pidlist.Add(id);//数据1
string name= msdr.GetString(2);
pidlist.Add(name);//节点名称
}
msdr.Close();
}
catch (MySQLException ex)
{
string error = ex.Message;
Console.WriteLine(error);
return null;
}
finally
{
mc.Close();//关闭连接
}
(2)向数据库中插入、修改或删除记录
MySQLConnection mc = new MySQLConnection();//新建连接
mc = new MySQLConnection(new MySQLConnectionString(“localhost”,“mysql”,“root”,”password”).AsString);//连接数据库
try
{
mc.Open();//打开连接
MySQLCommand firstCmd = new MySQLCommand("set names gb2312",mc);//设置字符格式,防止出现中文乱码
firstCmd.ExecuteNonQuery();
MySQLCommand msc = new MySQLCommand();//声明一个MysqlCommand 变量,该变量用于执行数据库命令
msc.Connection = mc;
mscmandText = sqlquery;//(插入、修改或删除记录的sql语句)msc.ExecuteNonQuery();//执行命令
msc.Dispose();
return true;
}
catch (MySQLException ex)
{
Console.WriteLine(ex.Message);
return false;
}
finally
{
mc.Close();//关闭连接
}
2.C#语言
注意:在程序编写时,必须加注视
1) TCP监听程序
IPAddress m_host = IPAddress.Parse(MainProcess.LocalIP);
TcpListener listenning = new TcpListener(m_host, MainProcess.DataBasePort); listenning.Start();
2) TCP发送机接收程序
(1)发送
TcpClient client = new TcpClient(IpDestination, PortDestination);
NetworkStream clientFlow = client.GetStream();
byte[] byteTime = Encoding.BigEndianUnicode.GetBytes(str);
clientFlow.Write(byteTime, 0, byteTime.Length);
clientFlow.Close();
client.Close();
(2)接收
TcpClient connectionsocket; = listenning.AcceptTcpClient();
NetworkStream receiveFlow = connectionsocket.GetStream();
receiveBytes = receiveFlow.Read(receiveBuffer, 0, receiveBuffer.Length); connectionsocket.Close();
值得注意的是:c#中发送连接异常时,进入异常等待时间约为11秒。
2)定时器
定时器的创建、触发事件、定时时间以及定时器的关闭
aTimer1 = new System.Timers.Timer();
aTimer1.Elapsed += new ElapsedEventHandler(OnTimedEvent1);
aTimer1.Interval = 60000;
aTimer1.Enabled = true;
aTimer1.Enabled = false;
public static void OnTimedEvent1(object source, ElapsedEventArgs e) { }
3)多线程
Thread listenPort8010 = new Thread(listenMethod);
listenPort8010.Start();
值得注意的是:C#中没有完善的强制关闭线程的方法。
4)读写ini文件
(1)读
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); string Path = "C:\\Program Files\\网络监控系统\\数据库服务\\DatabaseIP.ini";
StringBuilder readData = new StringBuilder(255);
string Section = "ip";
string Key = "DatabaseIP";
GetPrivateProfileString(Section, Key, "", readData, 255, Path);
LocalIP = readData.ToString();
(2)写
[DllImport("kernel32")]
public static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
string Path = "C:\\Program Files\\网络监控系统\\数据库服务\\DatabaseIP.ini";
string Section = "ip";
string Key = "DatabaseIP";
string writeData = databaseIP1.Text;
WritePrivateProfileString(Section, Key, writeData, Path);
5)系统服务
在“引用”中添加“System.ServiceProcess”然后再工程文件中添加语句using System.ServiceProcess;即可使用系统服务方法类。
如下为遍历计算机中的系统服务
ServiceController[] services = ServiceController.GetServices();
foreach (ServiceController scTemp in services)
if (scTemp.ServiceName != null)
switch (scTemp.ServiceName)
系统服务的开启与关闭
ServiceController databaseService = new ServiceController("Net_Database Server"); databaseService.Start()
databaseService.Stop()
3.软件的打包
使用vs自带的“安装与部署”只能生成.msi文件,而且打包设置几乎没有,使用起来非常不便,此次采用setupfactory与vs结合的方法对软件进行打包处理。
针对3个服务器程序,首先使用vs自带的“安装与部署”生成3个.msi文件,可以将其添加入setupfactory中的初始文件中,在打包程序中进行引用,但是这些文件必须通过MSI to EXE Compiler工具转换为exe文件,否则程序会不予执行。
Setupfactory中是以屏幕操作为基础的,用户使用程序通过编辑屏幕就可以进行软件安装时对电脑的设置。
1)界面编辑
通过“添加”可以在“安装之前”、“安装之时”、“安装之后”添加多种屏幕。如对话框屏幕、输入框屏幕、选择框屏幕等等。
2)编程环境
3)编程语言
在不熟悉Setupfactory语言是可以通过“添加操作”选择对注册表,对话框,文件的属性、内容以及安装文件等执行相关操作。
语言使用
(1)对安装文件的执行
File.Run(_TempLaunchFolder.."\\数据库.exe", "", "", SW_SHOWNORMAL, false);
Application.Sleep(5000);
repeat
SetupEnd = File.IsInUse(_TempLaunchFolder.."\\数据库.exe");
until not SetupEnd;
Screen.Next();
(2)注册表
Registry.SetValue(HKEY_LOCAL_MACHINE,

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。