C# C Sqlite使用DataTable抛出约束异常

C# C Sqlite使用DataTable抛出约束异常,c#,sqlite,datatable,mono,C#,Sqlite,Datatable,Mono,我正在使用C/Mono访问Sqlite数据库 下面的查询在任何数据库应用程序中都可以正常工作,但是当我尝试加载结果时,DataTable一直在抱怨 这里有一个片段 cmd.CommandText = @"SELECT sectors.name AS sector_name, domains.name AS domain_name FRO

我正在使用C/Mono访问Sqlite数据库

下面的查询在任何数据库应用程序中都可以正常工作,但是当我尝试加载结果时,DataTable一直在抱怨

这里有一个片段

    cmd.CommandText = @"SELECT 
                          sectors.name AS sector_name,
                          domains.name AS domain_name
                        FROM
                          sectors_domains
                          INNER JOIN domains ON (sectors_domains.domain = domains.id)
                          INNER JOIN sectors ON (sectors_domains.sector = sectors.id)";

    using (var rdr = cmd.ExecuteReader())
    {
        using (DataTable dt = new DataTable())
        {
            dt.load(rdr)
        }
    }
这会引发一个错误:

ConstraintException: Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

所选字段(即,相应表中的两个.name字段)都被约束为唯一且非空。

如果不需要约束或进行调试以查找问题,则可以在加载时尝试将其关闭:

using (var rdr = cmd.ExecuteReader())
{
    using (DataSet ds = new DataSet())
    {
        using (DataTable dt = new DataTable())
        {
            ds.Tables.Add(dt);
            ds.EnforceConstraints = false;
            dt.Load(rdr);
            rdr.Close();
        }
     }
}

注意打字错误:-。这是免费编码的。

如果不需要约束或调试来查找问题,则可以在加载时尝试将其关闭:

using (var rdr = cmd.ExecuteReader())
{
    using (DataSet ds = new DataSet())
    {
        using (DataTable dt = new DataTable())
        {
            ds.Tables.Add(dt);
            ds.EnforceConstraints = false;
            dt.Load(rdr);
            rdr.Close();
        }
     }
}

注意打字错误:-。这是免费编码的。

尝试另一种加载数据的方法。免责声明:我没有试过这个

DataTable dataTable;
cmd.CommandText = @"SELECT 
    sectors.name AS sector_name,
    domains.name AS domain_name
    FROM sectors_domains
    INNER JOIN domains ON (sectors_domains.domain = domains.id)
    INNER JOIN sectors ON (sectors_domains.sector = sectors.id)";


// Create data adapter
SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);

// Populate dataTable based on DB query
da.Fill(dataTable);
da.Dispose();

尝试另一种加载数据的方法。免责声明:我没有试过这个

DataTable dataTable;
cmd.CommandText = @"SELECT 
    sectors.name AS sector_name,
    domains.name AS domain_name
    FROM sectors_domains
    INNER JOIN domains ON (sectors_domains.domain = domains.id)
    INNER JOIN sectors ON (sectors_domains.sector = sectors.id)";


// Create data adapter
SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);

// Populate dataTable based on DB query
da.Fill(dataTable);
da.Dispose();

你确定它们是独一无二的吗?如果你让它成为一个不同的选择并尝试它会发生什么?@ cjbsYEP,同样的错误,请看一看:如果这不起作用,请考虑分享你的数据。谢谢。显然,即使行是唯一的,也有重复的列,正如您在许多结果中所期望的那样。有办法解决这个问题吗?也许在特定的数据表行上有一个UniqueConstraint。看一看:它似乎是从查询返回的数据中推断出来的。或者禁用它们,正如下面@Uwe所建议的。你绝对确定它们是唯一的吗?如果你让它成为一个不同的选择并尝试它会发生什么?@ cjbsYEP,同样的错误,请看一看:如果这不起作用,请考虑分享你的数据。谢谢。显然,即使行是唯一的,也有重复的列,正如您在许多结果中所期望的那样。有办法解决这个问题吗?也许在特定的数据表行上有一个UniqueConstraint。看一看:它似乎是从查询返回的数据中推断出来的。或者按照下面@Uwe的建议禁用它们。谢谢!我试过了,但还是有同样的错误。谢谢!我试过了,但还是有同样的错误。。。。只是谢谢五年的工作使我无法在显示器上提出保险索赔。。。。只是谢谢五年的工作使我无法在显示器上提出保险索赔。