一.数据库阅读器
1.1数据库阅读器的定义
SqlDataAdapter是Dataset和 SQL Server之间的桥接器,用于检索和保存数据。SqlDataAdapter通过对数据源使用适当的Transact-SQL语句映射 Fill(它可填充Dataset中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 Dataset中的数据)来提供这一桥接。当SqlDataAdapter填充Dataset时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。
1.2理解误区
SqlDataAdapter 不是窗体控件,而是数据适配器,属于类。它存在于System.Data.SqlClient命名空间下,它具有访问数据库的能力,主要运用它的两个方法:Fill()方法将访问到的数据进行填充(一般用Dataset配合使用),另一个是update()方法,可以对怎么数据集进行更新。你所说的 控件是DateGridView吧,这是做数据展示的Windows控件, 可以通过SqlDataAdapter配合dataset来完成数据的绑定。
1.3数据阅读器的应用
数据阅读器用来读取前端数据库里的数据,用数据阅读器读取一整行的记录
SqlDateReader.sqlDateReader=sqlDateReader.ExecuteReader ();
1.此处有用到索引器,[ ]的括号中是查询的关键字,且索引器返回的是object类型的值,需用Tostring()装换成文本框可接收的数值类型,
2.读取到的各数据转换成字符串才能被文本框所接收。
3.由于C#中没有单纯读取日期的字符,所以选择与时间类型最符合的字符“DateTime”,采用强制转换,并截取所需的日期而不需时间。如下:
this.txb_BirthDate.Text = ((DateTime) sqlDateReader ["BirthDate"]).ToShortDateString();
此处的ToShortDateString完成截取所需的日期而不需时间。
注释:1.Datetime知识补充: (1)在C#中DateTime是一个包含日期、时间的类型,此类型通过ToString()转换为字符串时,可根据传入给Tostring()的参数转换为多种字符串格式。
二.优化读取的数据
2.1生日改用日历使用datatimepicker
2.2识别更方便
先创建一张班级表分配给下拉菜单,并且将学生表的classno类型改为INT,学生表的gender改成BIT类型。因为将班级表改为编号形式,当需要修改时方便很多,如下:
设置两个命令对象:
SqlCommand sqlCommand=new SqlCommand();
SqlCommand sqlCommand2 = new SqlCommand();
其中一个用来读取班级信息。
三.更新记录
3.1班级改成下拉框并且实现自动匹配,性别改用单选按钮
声明数据适配器SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
开始存表DataTable classTable = new DataTable();
sqlDataAdapter.Fill(classTable);
将表的内容送到下拉框并实现自动匹配(代码如下)
声明数据适配器SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
存表DataTable classTable = new DataTable();
sqlDataAdapter.Fill(classTable);
注释:1. this.cmb_Class.ValueMember = "No"; 实现了下拉框的自动匹配。
2. this.cmb_Class.DisplayMember = "Name";表示了下拉框中指定显示表格的字段。
3.2实现一个记录的多个值修改
声明实例化SQL命令
在update语句中将所有的字段参数化添加。用ExecuteNonQuery来执行命令,向数据库写入数据,并用消息框提示是否更改成功。
3.3打开照片并将其更新到数据库中
先在学生表添加一个新的列photo,类型为VARBINARY(MAX)
将打开对话框文件实例化,包括默认的位置和制定的文件类型为bmp
用对话框获得文件名,在控件上显示图片
3.4一次性读取多条学生记录
使用DateGridView控件显示:
3.5批量修改并保存到数据库,修改包括插入、删除、新增三种类型
要用DataAdapter灵活调用以上三种命令,如:sqlDataAdapter.InsertCommand = insertCommand;具体代码如下: