2011-01-25 7 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; 
       } 

しかし、私は直接クエリを実行する場合(つまり、ない私のアプリケーションではなくクエリブラウザを使用して)私はnull値やエラーを生成するものは何も表示されません。

クエリの日付範囲を変更した場合と同じように、データ固有のものでなければなりません。

誰でもアイデアがありますか?

おかげで、

ベン

PS次のようにクエリは次のとおりです。

sdChartRange.Fromと.TOはdatetime値です
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 

+0

私たちのデータベースとクエリ自体の構造を示してください..あなたは、データベース上の任意の制約を持っています。このエラーは、何らかの制約に違反した場合にのみ発生します。 –

答えて

0

あなたのテーブルのスキーマとそれを呼び出すクエリを知らなくても、言うことは難しいです。彼らは完璧なマッチであると確信していますか?

+0

私が知る限り。しかし、これはテーブルをオンザフライで作っているのですね。あらかじめ定義された列がないので、クエリの結果を取得し、それに基づいてdataTableを作成するだけです。 (またはそう思った...) – Ben

0

dataTable.GetErrors();を呼び出してエラー行を取得し、各エラー行のRowErrorプロパティを調べてログに記録することをお勧めします。

0

DBからの意図しない制約を避けるために、別の方法で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