1、我将数据库的内容读取到datagridview上,
2、我的表里面有一些外键
3、那么我这么写你看一下有什么问题,
string sql = "select ID,DeviceName,DeviceID,TypeName,LocationName,DeviceNumber,DeviceLendSituation,DeviceStatus,DevicePhoto,DeviceFunction from EquipmentInformation,EquipmentLocation,EquipmentType "; SqlDataAdapter da = new SqlDataAdapter(sql, conn); DataSet ds = new DataSet(); da.Fill(ds, "EquipmentInformation"); dataGridView1.DataSource = ds; dataGridView1.DataSource = ds.Tables["EquipmentInformation"];
但是问题出现了:
1、表里面的东西重复出现了,这是为什么
我该怎么去写,才能做到,连接好数据库以后,表里面的内容和外键上有联系,外加没有重复
理论上成功显示的数据应该是这样的
但是这样的写法是用linq写的,
using (var context = new DeviceDatabaseEntities1()) { var q = from t1 in context.EquipmentInformation from t2 in context.EquipmentLocation from t3 in context.EquipmentType from t4 in context.BorrowSituation where t1.DeviceLocation == t2.LocationID where t1.DeviceType == t3.TypeID where t1.DeviceLendSituation ==t4.BorrowID //where t1.DeviceRight == i select new { 编号 = t1.ID, 设备名字 = t1.DeviceName, 设备编号 = t1.DeviceID, 设备分类 = t3.TypeName, 设备位置 = t2.LocationName, 设备数量 = t1.DeviceNumber, 借出情况 = t4.IsBorrowed, 设备状态 = t1.DeviceStatus, 设备功能 = t1.DeviceFunction, 设备图片 = t1.DevicePhoto, }; dataGridView1.DataSource = q.ToList(); }
外加一个问题,这个是读取的项目中的DeviceDatabaseEntities1,如果数据库移到了服务器上,这样用还能用吗
没问题啊,你外键表中有些指向的字段(用于join)相同,最后结果是这样的。
那么。我该怎么写,才能不出现重复,
@一首歌听到忘世: 不知道你的数据结构及你的筛选条件。
@Daniel Cai:
CONSTRAINT [FK_EquipmentInformation_EquipmentLocation] FOREIGN KEY ([DeviceLocation]) REFERENCES [dbo].[EquipmentLocation] ([LocationID]),
CONSTRAINT [FK_EquipmentInformation_EquipmentType] FOREIGN KEY ([DeviceType]) REFERENCES [dbo].[EquipmentType] ([TypeID]),
ID,DeviceName,DeviceID,TypeName,LocationName,
显示这几个就行,你看怎么写才能达到不重复。
没什么特别的筛选条件,只是将数据库里面里面的东西显示出来,外键里面的内容,也join进去就行
@一首歌听到忘世:。。。。就你例子里面的数据,第一二三行明显不重复,要去重也要有规则啊。
@Daniel Cai: 我把数据也给你,
我读取的是第一张表里面的数据,然后里面的外键对应下面两个表里面的数据,我想读的时候,一一对应,而不是和排列组合一样,全部可能都输出。
而且不要有那种不匹配的数据出来
@一首歌听到忘世:
select * from EquipmentInformation a
inner join EquipmentType b on a.DeviceType=b.TypeID
inner join EquipmentLocation c on a.DeviceLocation=c.LocationID
字段方面你自己看要那个就写哪个。
@Daniel Cai: 多谢。搞定了
首先你会有重复数据是因为一对多的关系,我曾经也处理过类似这样的问题,解决办法有两个,一个是利用行转列,这个比较麻烦。另外一个办法就是减少重复字段,然后distinct
第二个办法,什么叫减少重复字段,然后distinct,能具体点吗
你看一下我上面给出的数据表,和表里面的数据
我刚刚网上找了找,但是,在我有外键内容要加入的情况下,这个方法合适吗
第一个行转列的方法是怎么个思路,能不能说一下