MySql多对多表进行管理操作

在实际的项目开发中,表的多对多的关系很常见,这就难免要对其进行增删查改操作,在这里介绍一种方法如何对这种关系进行处理(WinFrom下的,但主要的是Sql的操作)。
首先介绍数据库,数据库中有三张表,一张业务类型表,主要类有id,名称;一张车辆信息表,主要字段车辆编号,车牌号码;还有一张自然是两张表的关联表,car_bustype表主要字段car_no(车辆id),bus_type_no(业务类型id)。这三张表是多对多的最常见的表现形式,但是对于这三张表的维护就有多种方法了,业务类型表作为基础表,维护只是简单的对业务类型增删查改的操作;车辆信息表则是关键,在添加车辆信息时,必须选择它所拥有的业务类型,在这里主要讲述的就是对车辆信息的维护。
车辆信息的维护:
(1)说到维护,自然需要界面,在这里更主要的是增改的界面,也就是车辆信息详情界面,在这里我使用的是左侧一些车辆的基本信息(一些基本标签)+右侧业务类型DataGridView(第一行为复选框,第二行显示业务类型名称,隐藏业务类型id).
(2)增加车辆信息:绑定数据业务类型DataGridView是查询全部的业务类;点击保存时,自然是先插入主表也就是车辆信息表,然后的话就是得到车辆编号,然后遍历DataGridView选中的数据,在这里附上详细代码:

string sql = SQLstatement.车辆信息_insert(id,textBox车牌号码.Text.Trim());//车辆信息_insert为插入的sql语句,id为车辆编号,这里是我们系统根据指定方式生成的
foreach (DataGridViewRow row in dataGridView业务类型.Rows) { //保存选择的类型
  if (row.Cells[0].Value != null && row.Cells[0].Value.ToString().Equals("true")) {
     sql += string.Format("insert into car_bustype(car_no,bus_type_no) values('{0}','{1}');",id,row.Cells["业务类型id"].Value);//插入
     }
 }
    MySQLConnector.ExecuteSQLinMySQL(sql);

(3)修改车辆信息:利用这种方式实现增删查改的话,最难处理的也就是这个问题吧,修改的时候如何绑定所有的业务类型呢?而且还得把拥有的业务类型的复选框赋值为选中?在这里一段Sql代码即可解决.

DataTable dt = MyConnector.getDataSet(string.Format("select 类型2.id as 业务类型id,类型2.名称 as 业务类型,if(table2.car_no is null,'false','true') as 选择 from 业务类型 as 类型2 
left join (select id,名称,car_no from car_bustype inner join 业务类型 as 类型1 on 类型1.id=car_bustype.bus_type_no where car_no = '{0}') as table2 on table2.`id` = 类型2.id"),_carNo); //_caroNo为车辆信息列表传递而来的

以上代码即可直接绑定修改时DataGridView的数据。修改时保存我则使用的是先删除改车辆的所有数据,然后再重新插入,代码如下:

string sql = SQLstatement.救援车辆信息_update(textBox车辆编号.Text.Trim(), textBox车牌号码.Text.Trim());
sql += string.Format("delete from car_bustype where car_no='{0}';",textBox车辆编号.Text.Trim());
foreach (DataGridViewRow row in dataGridView业务类型.Rows)
{ //保存选择的类型
      if (row.Cells[0].Value != null && row.Cells[0].Value.ToString().Equals("true")){
            sql += string.Format("insert into car_bustype(car_no,bus_type_no) values('{0}','{1}');", textBox车辆编号.Text.Trim(), row.Cells["业务类型id"].Value);
          }
}
MySQLConnector.ExecuteSQLinMySQL(sql);

注:在这里我设置了DataGridViwe trueValue:true,falseValue:false故修改增加插入数据时,可.Equals(‘true’);
总结:在这里主要是记录一下如何绑定修改时的多对多表的数据,业务类型的数据绑定,这种方式主要就是改数据绑定时,需要进行一系列的数据处理,那句Sql即可解决全部的问题,不同的表时,只需替换指定的字段即可.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章