如何在前端界面操作数据表
思维导图:
在前端界面操作数据表来实现对数据库的操作,主要分4各部分,增删改查。通过Parameters.Add(@变量名,值)进行传值,思路上基本类似,主要区别就在于SQL命令语句的不同。下面主要就用DataGridView控件来实现数据表的查询简单介绍一下:
(1)首先声明并实例化SQL连接,连接上数据库,我这里是查询所有员工,以用作数据网格视图数据源;
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接;
sqlConnection.ConnectionString =
ConfigurationManager.ConnectionStrings["Sql"].ConnectionString; //配置管理器从配置文件读取连接字符串,并将之赋予SQL连接的连接字符串属性;
SqlCommand sqlCommand1 = new SqlCommand(); //声明并实例化SQL命令;
sqlCommand1.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
sqlCommand1.CommandText = "SELECT * FROM tb_yg;"; //指定SQL命令的命令文本;该命令查询所有员工,以用作数据网格视图数据源;
(2)实例化员工数据表,利用数据适配器读取数据,并填充数据表,用之前要在form里定义私有字段
/// 私有字段:员工数据表;
private DataTable ygTable;
/// 私有字段:按名称排序的员工数据视图;
private DataView ygViewByName;
.
SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter(); //声明并实例化SQL数据适配器;
sqlDataAdapter1.MissingSchemaAction = MissingSchemaAction.AddWithKey; //设置SQL数据适配器在缺少架构时的动作为追加主键,从而获取数据库中定义的主键;
this.ygTable = new DataTable(); //实例化本窗体的员工数据表,用于保存所有员工,以用作数据网格视图数据源;
sqlConnection.Open(); //打开SQL连接;
sqlDataAdapter1.Fill(this.ygTable); //SQL数据适配器读取数据,并填充员工数据表;
sqlConnection.Close(); //关闭SQL连接;
(3)将数据表设为DataGridView的数据源,也可以修改列文本,以及隐藏列等操作,如下
this.ygViewByName = new DataView(); //实例化本窗体的员工数据视图,用于按照名称进行快速查询;
this.ygViewByName.Table = this.ygTable; //设置员工数据视图对应的数据表;
this.ygViewByName.Sort = "Name ASC"; //设置员工数据视图的排序条件,即查询所覆盖的列;
this.dgv_yg.Columns.Clear(); //数据网格视图的列集合清空;
this.dgv_yg.DataSource = this.ygTable; //将数据网格视图的数据源设为员工数据表;
this.dgv_yg.Columns["No"].HeaderText = "编号"; //将数据网格视图的指定列的表头文本设为中文;
this.dgv_yg.Columns["Name"].HeaderText = "姓名";
this.dgv_yg.Columns["Sex"].HeaderText = "性别";
this.dgv_yg.Columns["Birthday"].HeaderText = "生日";
this.dgv_yg.Columns["Phone"].HeaderText = "电话";
this.dgv_yg.Columns["Address"].HeaderText = "住址";
this.dgv_yg.Columns["Pwd"].Visible = false; //将数据网格视图的指定列设为不可见;
this.dgv_yg.Columns["Ksno"].Visible = false;
this.dgv_yg.Columns["Image"].Visible = false;
this.dgv_yg.Columns[this.dgv_yg.Columns.Count - 1].AutoSizeMode = //数据网格视图的最后一列的自动调整列宽模式设为填充(至数据网格视图右侧边缘);
DataGridViewAutoSizeColumnMode.Fill;
(4)这样设置的数据网格视图都是文本框模式,太过于单调,我们也可以将下拉框加入进去,如下:将员工所属科室设置为下拉框模式
先定义个私有字段:科室数据表
private DataTable ksnoTable;
接着,同上面所讲查询科室,作为数据源,打开数据库,填充数据表
SqlCommand sqlCommand2 = new SqlCommand(); //声明并实例化SQL命令;
sqlCommand2.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
sqlCommand2.CommandText = "SELECT * FROM tb_ks;"; //指定SQL命令的命令文本;该命令查询所有科室,以用作数据网格视图数据源;
SqlDataAdapter sqlDataAdapter2 = new SqlDataAdapter(); //声明并实例化SQL数据适配器;
sqlDataAdapter2.SelectCommand = sqlCommand2; //将SQL数据适配器的查询命令属性指向SQL命令;
sqlDataAdapter2.MissingSchemaAction = MissingSchemaAction.AddWithKey; //设置SQL数据适配器在缺少架构时的动作为追加主键,从而获取数据库中定义的主键;
sqlConnection.Open(); //打开SQL连接;
sqlDataAdapter2.Fill(this.ksnoTable); //SQL数据适配器读取数据,并填充科室数据表;
sqlConnection.Close(); //关闭SQL连接;
最后将下拉框加入数据网络视图列集合
DataGridViewComboBoxColumn ksColumn = new DataGridViewComboBoxColumn(); //声明并实例化数据网格视图下拉框列,用于设置先修课程;
ksColumn.Name = "Ksno"; //设置下拉框列的名称;
ksColumn.HeaderText = "科室"; //设置下拉框列的表头文本;
ksColumn.DataSource = this.ksnoTable; //设置下拉框列的数据源为科室数据表;
ksColumn.DisplayMember = "Name"; //设置下拉框列的显示成员为(科室数据表的)名称(列);
ksColumn.ValueMember = "No"; //设置下拉框列的值成员为(科室数据表的)编号(列);
ksColumn.DataPropertyName = "Ksno"; //设置下拉框列的数据属性名称为(员工数据表的)科室编号(列);
ksColumn.DisplayIndex = 3; //设置下拉框列的显示顺序;
ksColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; //设置下拉框列的自动调整列宽模式为填充;
this.dgv_yg.Columns.Add(ksColumn); //将下拉框列加入数据网格视图的列集合;
(5)通过Button实现模糊检索
if (cbo_condition.Text == "按工号查询")
{
DataRow searchResultRow = this.ygTable.Rows.Find(this.txt_search.Text.Trim()); //借助本窗体的课程数据表的行集合的方法Find,根据主键值(即课程编号)快速查找相应课程,并返回其所在的数据行;但数据行不能作为数据源,需另行创建数据表,并导入该数据行,最后将数据表作为数据源;
DataTable searchResultTable = this.ygTable.Clone(); //借助本窗体的课程数据表的方法Clone,创建相同架构的空表,用于保存搜索结果所在数据行;
searchResultTable.ImportRow(searchResultRow); //将(复制后的)数据行导入数据表;
this.dgv_yg.DataSource = searchResultTable; //将数据网格视图的数据源设为搜索结果数据表;
}
else
{
if (cbo_condition.Text == "按姓名查询")
{
DataRow[] searchResultRows =
this.ygTable.Select("Name LIKE '%" + this.txt_search.Text.Trim() + "%'"); //借助本窗体的课程数据表的方法Select,并提供与SQL类似的谓词表达式作为查询条件,根据拼音缩写进行模糊查询(仅支持%通配符);查询将返回数据行数组;
DataTable searchResultTable = this.ygTable.Clone(); //借助本窗体的课程数据表的方法Clone,创建相同架构的空表,用于保存搜索结果所在数据行;
foreach (DataRow row in searchResultRows) //遍历搜索结果所在数据行数组;
{
searchResultTable.ImportRow(row); //数据行导入数据表;
}
this.dgv_yg.DataSource = searchResultTable; //将数据网格视图的数据源设为搜索结果数据表;
}
运行结果如下: