生产过程防呆纠错系统客户端的开发总结
话是这么说,其实没打算写太正经的东西。
DataSet及相关类
ADO.NET最核心的数据库操作类。
(关于ADO.NET:https://www.cnblogs.com/liuhaorain/archive/2012/02/06/2340409.html)
上面的博客详细介绍了.NET的数据库操作技术ADO.NET的相关内容,一直到基本的连接和增删改查都有介绍(?)。
可惜太监了。
我这里只作一些功能和与之相关的要点的总结。
功能
引用命名空间:
1 | using System.Data |
类名:DataSet
、DataTable
、DataRow
DataSet以及其相关类,主要作用就是按照需要把数据库中的部分数据复制下来。然后对DataSet进行增删改查后,再将这些变更同步回去。而涉及到与实际数据库进行复制和同步的操作,就是由DataAdapter类完成的。
DataTable类对应数据库中的表,是复数DataRow的集合。
DataSet类对应整个数据库,是复数DataTable的集合。
DataRow类对应某条数据,值得一提的是,一个新DataRow的实例化是以
1 | DataRow row = 某个DataTable实例.NewRow(); |
这样的方法实现的。(而这条新Row需要通过DataTable.Rows.Add(DataRow r)
的方法添加进DataSet。)
类名:(某个数据库的)DataAdapter
使用DataAdapter首先要将该数据库的运行库(.dll)引用进项目,然后在命名空间引用。
DataAdapter从数据库复制数据需要两个参数,可在实例化时指定:数据库连接字符串
:特定格式,包含有数据库的IP,连接数据库用到的用户名和密码等。查询字符串
:SQL语句,以SELECT打头,用于指定你要增删改查的数据范围。
随后使用DataAdapter.Fill(DataSet ds)
方法将数据库内容填充进DataSet中。
当完成对DataSet的增删改之后,要多进行一步奇怪的操作:
需要实例化一个CommandBuilder,实例化方法的参数就是这个DataSet。这一步的意义是构建这个DataSet的同步SQL语句集。(我不能理解这一步的意义,但一定要有。)
然后使用DataAdapter.Update(DataSet ds)
方法将DataSet修改同步到数据库。
关于DataTable和DataRow的操作并不复杂,可自行查询,不再赘述。
要点
1.不要将Adapter作为类成员变量!或者,在使用完之后立刻Dispose()
掉。
没有详细研究过,但连续使用两次Fill()或Update()会产生不可预测的数据库操作错误,即时释放掉是明智的选择。
此外,使用Fill()之前要将DataSet清空。
DataAdapter的两项参数要保存好,以保证Fill()和Update()的Adapter相同。
2.DataRow和DataTable以址传递。
DataTable.Select(选择字符串*)会返回一个DataRow数组,不管是直接修改这个数组中某一条的某一个数据,还是将这个数组中的某一条取出赋值给一个新的DataRow然后再做修改,这些修改都是直接修改的DataSet中的数据,会在Update()后同步到数据库上。
选择字符串*,类似SQL查询语句,但不完全一样,并非所有关键字都可用。
可见:https://www.cnblogs.com/hanke123/p/5881470.html或自行搜索DataTable的Select()用法
。
其他
数据库也可以通过Connection类和Command类进行简单的操作,见:https://www.cnblogs.com/qi123/p/9217010.html
SerialPort类及其事件
串口类的使用并不复杂,正如串口原理本身一般:https://blog.csdn.net/cy757/article/details/4474930
值得一提的是,串口的数据传输并不稳定,同样一串字符串,会被分割成不可控的任意长度被读取,并触发串口类的DataReceived事件。
对此,如果对于接收数据有实时处理的需求,我不建议将处理字符串的方法直接放到该事件中执行。应只将串口中的数据赋值给字符串类型的类成员变量,然后再用其他方式处理该变量。
对于事件和委托的学习和理解还远远不够,对此先不做整理。
C#控件相关
C#的控件常用的就那些,实际使用大多也是直接在设计器上修改,少数需要涉及代码的内容可以通过搜索用法完成,不再赘述。
ListView相关。http://blog.sina.com.cn/s/blog_62c4551e01014sr6.html
TextBox输入限制。https://blog.csdn.net/weixin_44135331/article/details/110876573
C#编程规范等杂项
命名规范:https://www.cnblogs.com/cg919/p/10512749.html
注释规则待补充。
关于Switch语句。C#不允许贯穿,每个case都必须有一个break作为结束,除非其代码段完全为空。
字符串处理。C#控件显示的字符串,只有以"\r\n"
的形式才能确实地换行,分割时要注意清除干净,添加时要记得写全。
技术栈补全
- C#事件和委托
- 以太网通讯——PLC通讯
- Web前端及后台
- 数据库安全——加密和服务器