一、思维导图

二、知识点析剖

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#数据库学习到这了。

转载于:https://www.cnblogs.com/Holiday-L/p/9807089.html

C#学习之ObjectOriented、Record相关推荐

  1. java record用法_JDBM学习八(Record)

    1.record概念 Record是从使用者角度来说的,如使用PhysicalRowIdManager插入一个10000byte的Record byte[] data = TestUtil.makeR ...

  2. Python学习打卡【Task3】异常处理

    目录 一.学习知识点概要(review) 二.学习内容(record) 三.学习问题与解答(analysis) 四.学习思考与总结(summary) 一.学习知识点概要(review) 1.Pytho ...

  3. Python学习打卡【Task4】列表,字典和元组

    目录 一.学习知识点概要(review)     二.学习内容(record) 三.学习问题与解答(analysis) 四.学习思考与总结(summary) 一.学习知识点概要(review)     ...

  4. 老白理解的REDO LOG

    理解REDO LOG(1) 介质恢复和实例恢复的基本概念 REDO LOG是Oracle为确保已经提交的事务不会丢失而建立的一个机制.实际上REDO LOG的存在是为两种场景准备的,一种我们称之为实例 ...

  5. salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)...

    本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...

  6. php object oriented,PHP学习记录之面向对象(Object-oriented programming,OOP)基础【接口、抽象类、静态方法等】...

    本文实例讲述了PHP面向对象(Object-oriented programming,OOP)基础.分享给大家供大家参考,具体如下: 我们可以使用接口(interface),指定某个类必须实现哪些方法 ...

  7. 在pascal环境下学习record

    对比C语言 struct 的使用typepud=^userdata_struct; //用^定义指针类型,record定义前被使用的唯一情况,与C不同userdata_copy_fn=function ...

  8. 【学习笔记】域名资源记录(Resource Record)

    Zone file描述了DNS zone.DNS zone是层级DNS结构的子集,往往是单独的域.Zone file包括域名到IP地址及其他资源的映射,以RR文本形式表示.zone file可能是一个 ...

  9. 阿雪的学习记录|【V-Rep】Graph找不到Add new data stream to record问题解决及简单实现revolute_joint转动

    来先解决在Graph里找不到Add new data stream to record的问题,哇,全网都没人说这个事儿,你们都直接用的4.1.0版本吗!是的,4.2.0版本就是会没有这一项,我也找不着 ...

最新文章

  1. sockets C#
  2. 后台报错java.lang.IllegalArgumentException: Invalid character found in the request target.
  3. 在浏览器中进行深度学习:TensorFlow.js (二)第一个模型,线性回归
  4. msfvenom 生成php木马,利用msfvenom生成木马程序
  5. Silvaco 学习笔记——循环:sweep
  6. Supervisor 使用说明,轻松管理进程
  7. python tests in xxx问题
  8. 学习笔记:计算机字符编码标准之GB2312-1980中文字符编码
  9. pgsql数据替换替换换行符
  10. 如何修复手机里的m4a格式录音文件
  11. Labview LabSQL下载
  12. 企业为什么更青睐选择第三方短信平台?
  13. 【数据库学习】关系数据库总结
  14. 另类解决android中用三星手机拍的照片存储后旋转问题。
  15. python并集_python去并集
  16. 断食法法定分啊发顺丰啊
  17. 代码模块化和可读性的tradeoff
  18. 基于java前行国家公务员模拟笔试系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  19. ThinkPHP框架总结之配置及使用
  20. android图片透明度跟缩放大小动画事件

热门文章

  1. java 泛型 泛型接口(Generic Interfaces)类型形参(Type Parameters)
  2. python yaml
  3. jinja filter
  4. pandas.DataFrame.append
  5. 从C语言到C++语言
  6. python多线程没用_Python 的多线程原来不是真的多线程啊
  7. vSphere Web Client 中的 vSAN 性能图 (2144493)
  8. 解决重启VCSA 6.0,访问vsphere web client提示:503 Service Unavailable错误
  9. 关于“想哭”病毒,我也来两句。--转载
  10. Java基础学习总结(165)——API 安全最佳实践