2014-02-27 46 views
1

我正在使用C#/ Mono來訪問Sqlite數據庫。C#Sqlite引發與DataTable的ConstraintException

以下查詢在任何數據庫應用程序中均正常工作,但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. 

的字段被選擇(在各表中,即,既。名稱字段)被約束爲獨特的和非空。

+0

你絕對相信他們是獨一無二的嗎?如果您將其設置爲「SELECT DISTINCT」並嘗試它,會發生什麼? – CJBS

+0

@CJBS是的,與DISTINCT – cyrus

+0

相同的錯誤看看這個:http://stackoverflow.com/a/7029713/3063884如果這不起作用,請考慮共享您的數據。 – CJBS

回答

2

嘗試不同的方法來加載數據。 (免責聲明:我沒有試過這個)

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(); 
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(); 
     } 
    } 
} 

謹防錯別字:-)的。這是freehandcoded。

+0

謝謝!我試過這個,但是我仍然得到相同的錯誤。 – cyrus