C# 使用C语言删除重复项

C# 使用C语言删除重复项,c#,sql,C#,Sql,可能重复: 我的查询返回gridview中的所有重复项。但是,当我从副本中选择一条记录时,这两条记录都将被删除。当我对userlist中的所有用户使用直接选择时,delete选项将只删除选中的行。我怀疑当我从dup中选择一条记录时,它正在使用select命令,因此抓取了两个主键 SelectCommand="SELECT [PKEY], [user] FROM [userlist] WHERE LogonName IN ( SELECT

可能重复:

我的查询返回gridview中的所有重复项。但是,当我从副本中选择一条记录时,这两条记录都将被删除。当我对userlist中的所有用户使用直接选择时,delete选项将只删除选中的行。我怀疑当我从dup中选择一条记录时,它正在使用select命令,因此抓取了两个主键

SelectCommand="SELECT [PKEY], [user] FROM [userlist]
            WHERE LogonName IN (
                SELECT [user]
                FROM [userlist]
                GROUP BY [user]
                HAVING (COUNT([user]) > 1))"
DeleteCommand="DELETE FROM [userlist] WHERE [PKEY] = @PKEY" >
为复选框添加代码,该复选框在使用“直接选择”时有效:

if (checkbox.Checked)
            {
                int PKEY = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value);
                SqlDataSource1.DeleteParameters["PKEY"].DefaultValue = PKEY.ToString();
                SqlDataSource1.Delete();
            }
必须在gridView上返回PrimaryKey。当您删除时,您会传递所选的primarykey

必须确保PKEY在表的数据库中定义为PrimaryKey

您还可以向查询中添加DISTINCT

SELECT DISTINCT ...

如果可以选择任意记录,则删除每个记录(每组一条)的简单方法是使用主键的最大值并删除所有其他记录:

DELETE FROM [userlist]
WHERE PKEY NOT IN (
    SELECT MAX(PKEY) pkey
    FROM [userlist]
    GROUP BY [user]
    )

每一行有什么独特之处吗?或者它们是完全重复的吗?请不要在标题中添加标签信息。StackOverflow有一个非常有效的标签系统,可以自动对问题进行分类;该系统甚至知道如何正确地将这些信息提供给谷歌。通过在问题的标记区域而不是标题中输入标记,正确使用标记,并使用标题中的额外空间来改进问题本身。谢谢,这很有帮助。我使用了不同的查询。可能存在具有不同主键的SQL重复项的重复项–CoCowall您的查询不正确。您正在将loginname与同一表中的用户进行比较。将内部查询更改为选择logonname…..是,PKEY是SQL表SqlDataSource1中的主键。DeleteParameters[PKEY]。DefaultValue=PKEY.ToString;SqlDataSource1.Delete;DataKeyNames=PKEY在我的gridview中。我需要返回副本,以便用户可以看到哪一个删除。