日期:2014-05-18  浏览次数:20848 次

C# dataGridView 发送给数据库的命令带有
C# code
                mycomm = "SELECT DISTINCT * FROM pay WHERE pay_username NOT IN (SELECT pay_username FROM pay WHERE pay_pwd IS NULL )";

                OleDbDataAdapter sda = new OleDbDataAdapter(Mycomm, MyConn);
                DataSet ds = new DataSet();
                sda.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0];


dataGridView 成功的加载了数据库返回来的信息.不过虽然我在SELECT后面加上了 DISTINCT 但是出现在dataGridView1里 还是有相同的行

请问应该怎么处理?
谢谢


------解决方案--------------------
可以在在一个datatable里面做了一个主键,这样避免了重复的信息

DataTable dt=(System.Data.DataTable)this.ds.Tables[0];
string[] fileds={"Filed1","Filed2"};//DISTINCT字段数组
DataTable newdt=this.SelectDistinct(dt,fileds);//返回过滤后的DataTable
------解决方案--------------------
不能用select *, 因为 * 就代表所有,你每一行的数据肯定有某个字段是不一样的,要不然就不会有2条了
比如所表A 里有两个字段,id(主键)和name,因为主键肯定不会相同的,所以
数据分别是
1,hugo
2,hugo
3,alice
4,alice
如果 select distinct * from A
那么查询出来就是4条数据
如果 select distinct name from A
那么查询出来就是2条数据
知道为什么了吗,就是因为distinct是按照不是相同的数据来查找的