一、知识点描述
1、利用数据绑定控件DataGridView和数据库连接,实现数据的插入,可以减少频繁的与数据库交互,缓解数据库的工作压力。
2、SqlDataReader对象是一个简单的数据集,用于从数据源中检索只读数据集,可以用于大量数据的检索。SqlDataReader只允许以只读、顺向的方式查看数据库中存储的数据,提供了一个有效率的数据查看模式,同时还非常的节省资源,因为它支持的功能比较有限。
3、可以使用SqlCommand类来实现数据的删除,但是要保证Delete语句是合法有效的,在制定Delect语句时,最重要的就是Where语句的书写。
4、水晶报表是一个很实用的报表开发工具,可以将数据表中的数据逐一显示出来,使结果更直观。
public partial class frm_Systemadmin : Form
{
private DataTable DepartmentTable;
private DataView DepartmentViewByName;
public frm_Systemadmin()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen; //本窗体启动位置设为屏幕中央;
this.dgv_department .RowHeadersVisible = false; //数据网格视图的行标题不可见;
this.dgv_department .BackgroundColor = Color.White; //数据网格视图的背景色设为白色;
this.dgv_department .AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.AllCells; //数据网格视图的自动调整列宽模式设为显示所有单元格;
}
private void btn_research_Click(object sender, EventArgs e)
{
DataRowView[] searchResultRowViews =
this.DepartmentViewByName .FindRows(this.txb_department .Text.Trim()); //借助本窗体的按名称排序的课程数据视图的方法FindRows,根据排序列(即课程名称)快速查找相应课程;由于该列并非主键,可能返回多行查询结果,故返回数据行视图数组;数据行视图数组不能直接作为数据源,需转为列表后方可作为数据源;
DataTable searchResultTable = this.DepartmentTable .Clone(); //借助本窗体的课程数据表的方法Clone,创建相同架构的空表,用于保存搜索结果所在数据行;
foreach (DataRowView dataRowView1 in searchResultRowViews) //遍历搜索结果所在数据行视图数组;
{
searchResultTable.ImportRow(dataRowView1.Row); //通过每条数据行视图的属性Row获取相应的数据行,并导入数据表;
}
this.dgv_department .DataSource = searchResultTable; //将数据网格视图的数据源设为搜索结果数据表;
}
private void frm_Systemadmin_Load(object sender, EventArgs e)
{
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接;
sqlConnection.ConnectionString =
"Server=(local);Database=医院门诊预约管理系统;Integrated Security=sspi"; //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
SqlCommand sqlCommand = new SqlCommand(); //声明并实例化SQL命令;
sqlCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
sqlCommand.CommandText = "SELECT * FROM tb_Department;"; //指定SQL命令的命令文本;该命令查询所有学生;
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器;
sqlDataAdapter.SelectCommand = sqlCommand; //将SQL数据适配器的查询命令属性指向SQL命令;
sqlDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; //设置SQL数据适配器在缺少架构时的动作为追加主键,从而获取数据库中定义的主键;
this.DepartmentTable = new DataTable(); //声明并实例化数据表,用于保存所有学生,以用作数据网格视图的数据源;
sqlConnection.Open(); //打开SQL连接;
sqlDataAdapter.Fill(DepartmentTable); //SQL数据适配器读取数据,并填充学生数据表;
sqlConnection.Close(); //关闭SQL连接;
this.DepartmentViewByName = new DataView();
this.DepartmentViewByName.Table= this.DepartmentTable;
this.DepartmentViewByName.Sort = "Name ASC"; //设置课程数据视图的排序条件,即查询所覆盖的列
this.dgv_department.DataSource = DepartmentTable; //将数据网格视图的数据源设为学生数据表;
this.dgv_department .Columns["Name"].HeaderText = "科室名";
this.dgv_department.Columns["No"].Visible = false;
this.dgv_department.Columns[this.dgv_department.Columns.Count - 1].AutoSizeMode = //数据网格视图的最后一列的自动调整列宽模式设为填充(至数据网格视图右侧边缘);
DataGridViewAutoSizeColumnMode.Fill;
}
private void dgv_department_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void btn_update_Click(object sender, EventArgs e)
{
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接;
sqlConnection.ConnectionString =
"Server=(local);Database=医院门诊预约管理系统;Integrated Security=sspi"; //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
SqlCommand insertCommand = new SqlCommand(); //声明并实例化SQL命令;该命令用于插入记录;
insertCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
insertCommand.CommandText = //指定SQL命令的命令文本;
"INSERT tb_Department"
+ "(Name)"
+ " VALUES(@Name);";
insertCommand.Parameters.Add("@Name", SqlDbType.VarChar, 0, "Name"); //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
SqlCommand updateCommand = new SqlCommand(); //声明并实例化SQL命令;该命令用于更新记录;
updateCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
updateCommand.CommandText = //指定SQL命令的命令文本;
"UPDATE tb_Department"
+ " SET Name=@Name"
+ " WHERE No=@No;";
updateCommand.Parameters.Add("@Name", SqlDbType.VarChar, 0, "Name"); //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
updateCommand.Parameters.Add("@No", SqlDbType.VarChar,0 , "No");
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器;
sqlDataAdapter.InsertCommand = insertCommand; //将SQL数据适配器的属性InsertCommand指向用于插入记录的SQL命令;
sqlDataAdapter.UpdateCommand = updateCommand; //将SQL数据适配器的属性UpdateCommand指向用于更新记录的SQL命令;
DataTable DepartmentTable = (DataTable)this.dgv_department .DataSource; //声明数据表,并指向数据网格视图的数据源;数据源默认类型为object,还需强制转换类型;
sqlConnection.Open(); //打开SQL连接;
int rowAffected = sqlDataAdapter.Update(DepartmentTable); //SQL数据适配器根据学生数据表提交所有更新,并返回受影响行数;
sqlConnection.Close(); //关闭SQL连接;
MessageBox.Show("更新" + rowAffected.ToString() + "行。"); //在消息框显示受影响行数;
}
}