一、思维导图
二、知识点析剖
1、面向对象
(1)类:当一个窗体代码太多时,不便于查看和写入,可以使用类来简化代码窗口,使用get关键字来获取一个公有属性的值,
而使用set来设置一个公有属性的值,如:
public string No
{
get;
set;
}
(2)三层架构:应用于项目比较大时,这样可以让项目模块化,分工明确,易于维护。三层架构是指界面层(UI),业务逻
辑层(BLL)和数据访问层(DAL),界面层主要完成与用户的交互;逻辑层完成商业逻辑运算;数据层完成数据存储。
(3)SQL助手:调用SQL助手的静态方法GetCommand来创建SQL命令,如:
using (SqlCommand sqlCommand = GetCommand(commandText, isStoredProcedure, sqlParameters))
2、记录
(1)sqlDataReader数据阅读器:可以读取表中的数据,如:
SqlDataReader sqlDataReader = sqlCommand2.ExecuteReader();
if (sqlDataReader.Read())
{
this.txb_no.Text = sqlDataReader["d_no"].ToString();
this.txb_rename.Text = sqlDataReader["d_rename"].ToString();
}
(2)Control控件
命令按钮Button:书写所需执行的命令
组合框ComboBox:载入数据库某一表中数据,供用户选择,不需手动键入 ,读取时选中数据表相应的值,例:
sqlDataAdapter.Fill(departmentTable); //Fill将数据库表的内容填充
this.cmb_department.DataSource=departmentTable; //设置数据源
this.cmb_department.DisplayMember="name" ; // 设置要显示的列内容
this.cmb_department.ValueMember="no" // 设置隐藏的列
this.cmb_department.SelectedValue=(int)sqlDataReader["no"]; // 读取数据时将选中数据表相应值
单选按钮 RadioButton:供用户选择其中一个,提高系统的可读性,例:
this.rdb_male.Checked=(bool)sqlDataReader(d_sex);
this.rdb_female.Checked=(!bool)sqlDataReader(d_sex); //数据表中性别一列数据类型为bit,这样就可以选中其中一个,另 一个单选按钮不选中
日历控件dataTimePicker:可以显示日期信息,常用于出生日期的设置,例:
首先在数据库表中,日期的属性列d_date的数据类型要设置为Date
在C#里面添加日历控件:
this.dtp1.Value=(DateTime)sqlDataReader["d_date"]; //进行日期型强制转化
(3)Update更新修改数据,如:
sqlCommand.CommandText =
"UPDATE tb_doctor"
+ "SET d_rename=@Name,g_no=@Gender,d_type=@Type,d_cardno=@CardNo,d_title=@Title,d_date=@Date,d_telno=@Tel,no=@Department"
+ " WHERE d_no=@No;";
sqlCommand.Parameters.AddWithValue("@Name", this.txb_rename.Text.Trim());
sqlCommand.Parameters.AddWithValue("@Gender", this.radioButton2.Checked );
sqlCommand.Parameters.AddWithValue("@Type", this.com_type.SelectedItem);
(4)Image 上传图片:先在空间写入using System.Drawing.Imaging; 图片在数据库表中是以可变二进制存放的,所以在数据库表中定义为
photo
VARBINARY(MAX)
,...
在窗体载入图片:
photoBytes =
(sqlDataReader["photo"] == DBNull.Value ? null : (byte[])sqlDataReader["photo"]); //根据照片是否为数据库空值,分别将空值、转为字节数组的照片数据赋予事先声明的字节数组;
}
打开图片的命令:
OpenFileDialog openPhotoDialog = new OpenFileDialog()
{
Title = "打开照片文件(位图格式)"
, Filter = "BMP Files (*.bmp)|*.bmp"
, InitialDirectory = @"C:\"
};
if (openPhotoDialog.ShowDialog() == DialogResult.OK)
{
this.PhotoFileName = openPhotoDialog.FileName;
this.ptb_Photo.Image = Image.FromFile(this.PhotoFileName);
上面记录这部分的知识点的学习界面功能如下:
二、数据表
1、网格视图GridView:从数据库中读取整张表以网格形式显示,例:
this.dgv_DataSource=userTable; //设置数据源
this.dgv_user.Columns["u_no"].HeaderText="编号"; //用中文显示相应属性列,提高程序的可读性;
this.dgv_user.Columns["u_name"].HeaderText="姓名";
this.dgv_user.Columns["u_doctor"].Visible=false; //设置外键的不可见
DataGridViewComboBoxColum doctorColum=new DataGridViewComboBoxColumn(); //设置doctor属性列在网格视图中 以下拉框的形式显示
this.dgv_user.Columns.Add(doctorColumn); //将doctor数据列添加到user数据网格视图中
2、搜索查询search:按数据表的编号(主键)查询,例:
DataRow searchResultRow=userTable.Rows.Find.(this.textBox1.Text.Trim()); //查找数据表主键与textBox1里面内容相应的 数据行
DataTable searchResultTable=userTable.Clone(); //将user表的架构复制一份,无数据源
searchResultTable.ImportRow(searchResultRow); //将上面搜索到的数据行添加到空的user架构中
this.dgv_user.DataSource=searchResultTable(); //将数据源设置为上面查询到的表
按病历号(主键)设计页面如下:
按姓名查询的设计页面如下:
3分页Pagination:当数据表行记录过多时,可以使用分页的功能来优化界面,例:
上一页botton按钮:
if (this.CurrentPageNo > 1) //若当前页号大于1;
{
this.CurrentPageNo--; //则当前页号递减;
}
this.CurrentPageView.RowFilter = //设置课程数据视图的行筛选条件,即筛选当前页的记录;
"RowID >" + (this.CurrentPageNo - 1) * this.PageSize
+ " AND RowID <=" + this.CurrentPageNo * this.PageSize;
下一页botton按钮:
if (this.CurrentPageNo < this.MaxPageNo) //若当前页号尚未超出最大页号;
{
this.CurrentPageNo++; //则当前页号递增;
}
this.CurrentPageView.RowFilter = //设置课程数据视图的行筛选条件,即筛选当前页的记录;
"RowID >" + (this.CurrentPageNo - 1) * this.PageSize
+ " AND RowID <=" + this.CurrentPageNo * this.PageSize;
分页设计页面如下(每一页最多显示10记录):
点击下一页:
三、数据集
1、数据关系 Relation
TreeView是用来表示数据集关系的控件,运用TreeView控件可以让数据集之间的关系联系起来,例:
DataTabler qtypeTable = dataSet.Tables[0]; //声明人群类型数据表,对应数据集的表集合中的第1张数据表;
DataTable yajiankangTable = dataSet.Tables[1]; //声明亚健康人群数据表,对应数据集的表集合中的第2张数据表;
DataTable laonianrenTable = dataSet.Tables[2]; //声明老年人人群数据表,对应数据集的表集合中的第3张数据表;
DataTable manxingbingTable = dataSet.Tables[3]; //声明慢性病人群数据表,对应数据集的表集合中的第4张数据表;
也可以通过选中节点的Click事件来完成页面的跳转,例 :
if (this.treeView1.SelectedNode.Text == "添加新人群") //判断TreeView被选中节点的文本Text
{
this.Hide();
添加新人群 m = new 添加新人群();
m.Show(); //页面的跳转
}
效果图如下:
这次的C#数据库学习到这了。