首页 新闻 会员 周边 捐助

数据库读取问题

0
[已解决问题] 解决于 2016-12-22 17:29

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,如果数据库移到了服务器上,这样用还能用吗

一首歌听到忘世的主页 一首歌听到忘世 | 初学一级 | 园豆:138
提问于:2016-12-22 14:08
< >
分享
最佳答案
0

没问题啊,你外键表中有些指向的字段(用于join)相同,最后结果是这样的。

奖励园豆:5
Daniel Cai | 专家六级 |园豆:10424 | 2016-12-22 14:12

那么。我该怎么写,才能不出现重复,

一首歌听到忘世 | 园豆:138 (初学一级) | 2016-12-22 14:14

@一首歌听到忘世: 不知道你的数据结构及你的筛选条件。

Daniel Cai | 园豆:10424 (专家六级) | 2016-12-22 14:32

@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进去就行

一首歌听到忘世 | 园豆:138 (初学一级) | 2016-12-22 14:46

@一首歌听到忘世:。。。。就你例子里面的数据,第一二三行明显不重复,要去重也要有规则啊。

Daniel Cai | 园豆:10424 (专家六级) | 2016-12-22 14:55

@Daniel Cai: 我把数据也给你,

我读取的是第一张表里面的数据,然后里面的外键对应下面两个表里面的数据,我想读的时候,一一对应,而不是和排列组合一样,全部可能都输出。

而且不要有那种不匹配的数据出来

一首歌听到忘世 | 园豆:138 (初学一级) | 2016-12-22 15:00

@一首歌听到忘世:

select * from EquipmentInformation a

inner join EquipmentType b on a.DeviceType=b.TypeID

inner join EquipmentLocation c on a.DeviceLocation=c.LocationID

 

字段方面你自己看要那个就写哪个。

Daniel Cai | 园豆:10424 (专家六级) | 2016-12-22 15:44

@Daniel Cai: 多谢。搞定了

一首歌听到忘世 | 园豆:138 (初学一级) | 2016-12-22 17:29
其他回答(1)
0

首先你会有重复数据是因为一对多的关系,我曾经也处理过类似这样的问题,解决办法有两个,一个是利用行转列,这个比较麻烦。另外一个办法就是减少重复字段,然后distinct

临冰听雪丶 | 园豆:175 (初学一级) | 2016-12-22 14:52

第二个办法,什么叫减少重复字段,然后distinct,能具体点吗

你看一下我上面给出的数据表,和表里面的数据

我刚刚网上找了找,但是,在我有外键内容要加入的情况下,这个方法合适吗

支持(0) 反对(0) 一首歌听到忘世 | 园豆:138 (初学一级) | 2016-12-22 15:05

第一个行转列的方法是怎么个思路,能不能说一下

支持(0) 反对(0) 一首歌听到忘世 | 园豆:138 (初学一级) | 2016-12-22 15:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册