我使用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字段)被限制为Unique和Non-null。
答案 0 :(得分:3)
如果您不需要约束(或用于调试以找到问题),您可以尝试在加载时关闭它们:
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();
}
}
}
小心拼写错误:-)。这是免费的。
答案 1 :(得分:3)
尝试使用其他方法加载数据。 (免责声明:我没试过这个)
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();