2011-01-25 152 views
0

我得到一個未處理的異常約束,當我運行一組特定的PARAMATERS的下面的代碼:ConstraintException但我不知道爲什麼!

using (MySqlConnection connMySql = new MySqlConnection(global.g_connString)) 
      { 

       MySqlCommand cmd = connMySql.CreateCommand(); 

       cmd.CommandText = this.Query; 

       connMySql.Open(); 

       using (MySqlDataReader dr = cmd.ExecuteReader()) 
       { 

        DataTable dt = new DataTable(); 
        dt.Load(dr); 
        return dt; 
       } 

但是,如果我運行查詢直接的(即不是我的應用程序,但使用查詢瀏覽器)我看不到任何空值或任何會產生錯誤的內容。

它必須是數據特定的,就像我改變我的查詢的日期範圍它工作正常。

任何人有任何想法?

感謝,

PS查詢如下:

SELECT COALESCE(ti.FIRST_NAME, 'Not Assigned') AS 'Technician',wo.WORKORDERID 'Request ID',aau.FIRST_NAME 'Requester', wo.TITLE 'Subject', rrs.resolution As Resolution, (wo.COMPLETEDTIME/1000) 'TimeStamp' 
              FROM WorkOrder_Threaded wot 
              INNER JOIN WorkOrder wo ON wot.WORKORDERID=wo.WORKORDERID 
              LEFT JOIN SDUser sdu ON wo.REQUESTERID=sdu.USERID 
              LEFT JOIN AaaUser aau ON sdu.USERID=aau.USER_ID 
              LEFT JOIN WorkOrderStates wos ON wo.WORKORDERID=wos.WORKORDERID 
              LEFT JOIN SDUser td ON wos.OWNERID=td.USERID 
              LEFT JOIN AaaUser ti ON td.USERID=ti.USER_ID 
              LEFT JOIN RequestResolution rrs ON wo.WORKORDERID=rrs.REQUESTID 
             WHERE (wo.COMPLETEDTIME != 0) AND (wo.COMPLETEDTIME != -1) AND (wo.COMPLETEDTIME IS NOT NULL) 
              AND wo.COMPLETEDTIME >= (UNIX_TIMESTAMP(TIMESTAMP('" + sdChartRange.From + @"')) * 1000) 
              AND wo.COMPLETEDTIME <= (UNIX_TIMESTAMP(TIMESTAMP('" + sdChartRange.To + @"')) * 1000) 
              AND wot.THD_WOID=wot.WORKORDERID 
             ORDER BY Technician ASC 

凡sdChartRange.From和。要爲datetime值。

+0

請告訴我們的數據庫和查詢本身的結構..你擁有對數據庫的任何約束。因爲只有在違反某些約束條件時纔會引發此錯誤。 – 2011-01-25 12:31:50

回答

0

如果不知道表的模式以及您要調用的查詢,很難說。你確定他們是完美的搭配嗎?

+0

據我所知。但是,這使得桌子在飛行中,不是嗎?沒有預定義的列,所以它應該只是我的查詢的結果並創建一個基於它的數據表。 (或者我想......) – Ben 2011-01-25 12:25:55

0

我建議您撥打dataTable.GetErrors();以獲取錯誤行,然後檢查/記錄每個錯誤行的RowError屬性。

0

嘗試使用不同的方式加載DataTable,以避免來自數據庫的意外約束。在函數中試試這個。

MySqlCommand cmd = connMySql.CreateCommand(); 
cmd.CommandText = this.Query; 

connMySql.Open(); 

DataTable dataTable; 

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

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

return dataTable; 

另見:C# Sqlite throwing ConstraintException with DataTable

相關問題