2009-07-27 6 views
3

あなたは以前私の他の質問に優れていました。だからここでもう一度、助けが必要です!強く型付けされたデータセットでは、テーブルのマッピングに問題はありませんか? C#.net 2.0

3つのテーブルと強く型付けされたデータセットを結合するクエリがあります。このデータセットには、クエリから返されるすべての列が定義されています。私がdataadapterを埋めるために行くとき、何も満たされません。私は別のメソッドからコードをコピーしたので、大丈夫だと推測します。唯一の違いは、このクエリには結合があることです。すべてのヘルプは大歓迎、コードは次のとおりです。

問合せ:

select gsh.locid, locations.description, GSH.workorder, GSH.comstatus, GSH.teststatus, GSH.fireresult, GSH.lightresult, GSH.watercold, GSH.waterhot, GSH.responsedate, GSH.comments, GSH.testername from gsh_vhs_locations locs left outer join locations on locs.maximoloc = locations.location left outer join gsh_vhs_comms GSH on locs.LOCID = GSH.locid where gsh.insertdate > sysdate-7 order by locid, locations.description, GSH.workorder, GSH.comstatus, GSH.teststatus, GSH.fireresult, GSH.lightresult, GSH.watercold, GSH.waterhot, GSH.responsedate, GSH.comments, GSH.testername

コード:あなたが見ることができるように

ResponseSheet Tests = new ResponseSheet(); 
     DataSet ReturData = new DataSet(); 
     OracleDataAdapter da; 
     try 
     { 
      using (OracleConnection conn = new OracleConnection(ConnString)) 
      { 
       conn.Open(); 

       OracleCommand cmd = new OracleCommand(); 
       cmd.Connection = conn; 
    cmd.CommandText = @"select gsh.locid, locations.description, GSH.workorder, GSH.comstatus,  GSH.teststatus, GSH.fireresult, GSH.lightresult, GSH.watercold, GSH.waterhot, GSH.responsedate,  GSH.comments, GSH.testername 
from gsh_vhs_locations locs 
left outer join locations on locs.maximoloc = locations.location 
left outer join gsh_vhs_comms GSH on locs.LOCID = GSH.locid 
where gsh.insertdate > sysdate-7 
order by locid, locations.description, GSH.workorder, GSH.comstatus, GSH.teststatus, GSH.fireresult,  GSH.lightresult, GSH.watercold, GSH.waterhot, GSH.responsedate, GSH.comments, GSH.testername "; 

       da = new OracleDataAdapter(cmd.CommandText, conn); 

da.MissingMappingAction = MissingMappingAction.Error; 
da.TableMappings.Add("Table", "ResponseSheet"); 
       da.Fill(ReturData, "ResponseSheet"); 

      } 

     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(TimeStamp() + ex.Message.ToString() + "Get Capture Report (TraceCode: 00019)"); 
     } 


     return ReturData; 
    } 

、私はテーブルマッピングのエラー報告を回してきましたしかし、私は実行時にエラーがなく、ただ空のデータセット(da = null)

あなたはニーズがあることならば私だけでランダムGoogleのフレーズを突く、みんなで助けることができる

何か - 感謝:)

ガレス

+1

クエリが実際にデータを返すことを確認しましたか? – Dave

+0

yep 私はそれをヒキガエルで実行し、必要なものを取り戻します。 良い点だけど、私にチェックをさせてくれた! – Gareth

+1

すべてのことを確認するには、cmd.ExecuteNonQueryを実行して戻り値をチェックして、行が確実に読み取られるようにすることをお勧めします。 –

答えて

0

名義人

この問題が見つかりました。

私は非常に残念ですが、いくつかの理由で私のTNSnamesは新しいdevのデータベース用に設定されていなかった(文字通りその日の午後、それを変更し、1つの文字をオフに見逃していた)

ので、それはキャッチを打ったし、私はそれを見つけていなかった。

私は非常にばかばかしいと感じますが、とにかく皆さんの助けに感謝します。

ヘンクは私のコードをかなり整理しました.Bethは実際にはクエリに問題があったことに気づきました。(ジョインは正しくありませんが、まだデータを返します)

おかげで再びすべて、

ガレス

EDIT:これにさらには、テーブルマッピングは、(夜の睡眠はこの1つを解決するための鍵のようです!)出ていたので、今後の参考人のため:

da.MissingMappingAction = MissingMappingAction.Passthrough; da.MissingSchemaAction = MissingSchemaAction.Add;

は、すべての関連するテーブルマッピングをデータアダプタに追加して、今すぐ正しく充填されます。

1

OnFillErrorイベントを処理してください。私はそれが助けになるとは思わないが、それはショットの価値がある。

1

conn.Open()の呼び出しを削除し、.Fill()で接続を開放する必要があります。今すぐあなたは接続を開いたままにしています。私はそれが主な問題であるかどうかは分かりませんが、より良いエラー報告が得られるかもしれません。

また、実際に使用していないため、OracleCommandオブジェクトを削除できます。アダプターは新しいCommandオブジェクトを作成します。

+0

良い点、私のデバッグの怒りの中で、私はどこからでもコードをコピーしてしまった。今すぐ整頓: ありがとう – Gareth

1

1が参加し、それを破壊するかどうかを確認追加してみて、参加すると、あなたが をexpect-結果を取得する場合fillメソッドは、そのクエリを使用して動作するかどうかinsertdate> SYSDATE-7 gsh_vhs_commsからLOCID選択を参照せずに、それを試してみてください。 この場合、結合がサポートされていない可能性があります。 そうでない場合は、何か別のことが起こっています。結合に焦点を当てると、誤解を招くことになります。

1

厳密に型指定されたデータセットの列名は、クエリで返された列名と一致していますか?