C# C Sqlite使用DataTable抛出约束异常
我正在使用C/Mono访问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
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的建议禁用它们。谢谢!我试过了,但还是有同样的错误。谢谢!我试过了,但还是有同样的错误。。。。只是谢谢五年的工作使我无法在显示器上提出保险索赔。。。。只是谢谢五年的工作使我无法在显示器上提出保险索赔。