C# 为什么这个查询用repeat值填充组合框?

C# 为什么这个查询用repeat值填充组合框?,c#,sql,winforms,C#,Sql,Winforms,我在数据库中有这两个表 tblProductSize(ID,SIZE_ID,PRODUCT_ID,COST_PRICE,SALE_PRICE) tblSize(SIZE_ID,SIZE) 在查询生成器中执行此查询时 SELECT tblSize.SIZE_ID AS Expr1, tblSize.SIZE FROM tblProductSize INNER JOIN tblSize ON tblProductSize.SIZE_ID = tblSize.SIZE_ID WHERE(t

我在数据库中有这两个表

tblProductSize(ID,SIZE_ID,PRODUCT_ID,COST_PRICE,SALE_PRICE)
tblSize(SIZE_ID,SIZE)
在查询生成器中执行此查询时

SELECT  tblSize.SIZE_ID AS Expr1, tblSize.SIZE FROM  tblProductSize INNER JOIN   tblSize 
ON tblProductSize.SIZE_ID = tblSize.SIZE_ID WHERE(tblProductSize.PRODUCT_ID = @product )
它告诉我确切的数值

SIZE_ID    SIZE
1          Small
2          Medium
3          Large
当我使用以下代码在C#中运行此查询时

public DataTable ReadCatWithProductID(int id)
{
    DataTable dt = new DataTable();
    try
    {
        conn.Open();// 
        SqlCommand cmd = new SqlCommand("SELECT  tblSize.SIZE_ID AS Expr1, tblSize.SIZE FROM  tblProductSize INNER JOIN   tblSize ON tblProductSize.SIZE_ID = tblSize.SIZE_ID WHERE(tblProductSize.PRODUCT_ID = " + id + ")", conn);
        SqlDataReader dr = cmd.ExecuteReader();
        dt.Load(dr);

    }
    catch (Exception)
    {

        throw;
    }
    finally
    {
        conn.Close();

    } return dt;
然后像这样填充组合框中的值

cmb.Items.Clear();
dlSize dlObj = new dlSize();
DataTable dt = new DataTable();
dt = dlObj.ReadCatWithProductID(1);
cmb.DisplayMember = "SIZE";
cmb.ValueMember = "Expr1";
cmb.DataSource = dt;
conn.Open();// 
SqlCommand cmd = new SqlCommand("SELECT Distinct tblSize.SIZE_ID, tblSize.SIZE FROM  tblProductSize INNER JOIN   tblSize ON tblProductSize.SIZE_ID = tblSize.SIZE_ID WHERE(tblProductSize.PRODUCT_ID = " + id + ")", conn);
SqlDataReader dr = cmd.ExecuteReader();
dt.Load(dr);
结果是这样的

cmb.Items.Clear();
dlSize dlObj = new dlSize();
DataTable dt = new DataTable();
dt = dlObj.ReadCatWithProductID(1);
cmb.DisplayMember = "SIZE";
cmb.ValueMember = "Expr1";
cmb.DataSource = dt;
conn.Open();// 
SqlCommand cmd = new SqlCommand("SELECT Distinct tblSize.SIZE_ID, tblSize.SIZE FROM  tblProductSize INNER JOIN   tblSize ON tblProductSize.SIZE_ID = tblSize.SIZE_ID WHERE(tblProductSize.PRODUCT_ID = " + id + ")", conn);
SqlDataReader dr = cmd.ExecuteReader();
dt.Load(dr);

我做错了什么,请引导我。

像这样试试

cmb.Items.Clear();
dlSize dlObj = new dlSize();
DataTable dt = new DataTable();
dt = dlObj.ReadCatWithProductID(1);
cmb.DisplayMember = "SIZE";
cmb.ValueMember = "Expr1";
cmb.DataSource = dt;
conn.Open();// 
SqlCommand cmd = new SqlCommand("SELECT Distinct tblSize.SIZE_ID, tblSize.SIZE FROM  tblProductSize INNER JOIN   tblSize ON tblProductSize.SIZE_ID = tblSize.SIZE_ID WHERE(tblProductSize.PRODUCT_ID = " + id + ")", conn);
SqlDataReader dr = cmd.ExecuteReader();
dt.Load(dr);

您的表
tblProductSize
是否可以对同一产品id有多条记录?@shell yes tblProductSize对同一产品有多条记录。因此,您可以针对不同的成本或价格返回多条重复记录。您可以使用distinct for i序列化了一个objectVerify,但必须非常小心,在这两种情况下使用的是同一个数据库。@Shell现在没有复制,但它只拾取两条记录,而不是第三条记录?