2009-07-27 9 views
3

Sie waren vorher mit meinen anderen Fragen ausgezeichnet - also hier bin ich wieder, brauche etwas Hilfe!Stark typisierte Datenmenge füllt sich nicht, Tabellenzuordnungsproblem? C# .net 2.0

Ich habe eine Abfrage, die drei Tabellen und eine stark typisierte Datenmenge, die die Spalten für alles, was aus der Abfrage zurückgibt, definiert hat. Wenn ich den Datenadapter ausfülle, wird nichts gefüllt. Ich habe den Code von einer anderen Methode kopiert, also nehme ich an, dass es in Ordnung ist - der einzige Unterschied besteht darin, dass diese Abfrage Joins enthält. Jede Hilfe dankbar, Code folgt:

Abfrage:

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

Code:

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

Wie Sie sehen können, habe ich die Fehlerberichterstattung für Tabellenzuordnungen gedreht auf, aber ich bekomme keine Fehler zur Laufzeit, nur ein leerer Datensatz (da = null)

Alles, was Sie mit den Jungs helfen kann, stecken nur zufällige Google-Sätze auf mich, wenn es sein muss - dank :)

Gareth

+1

Und Sie haben überprüft, dass Abfrage tatsächlich Daten zurückgibt, ja? – Dave

+0

yep Ich laufe es in Kröte und es holt zurück, was ich brauche. guter Punkt, aber Sie haben mich dazu gebracht, überprüfen zu gehen! – Gareth

+1

Um sicherzustellen, dass alles koscher ist, empfiehlt es sich, cmd.ExecuteNonQuery auszuführen und den Rückgabewert zu überprüfen, um sicherzustellen, dass Zeilen gelesen werden. –

Antwort

0

Okay Jungs

Ich habe das Problem gefunden.

mir sehr leid bin, aber aus irgendeinem Grund war mein TNSNAMES nicht für die neue Entwickler-Datenbank eingerichtet (buchstäblich es an diesem Nachmittag geändert und hatte einen Brief off verpasst)

so wurde es den Fang schlagen und Ich habe es nicht bemerkt.

Ich fühle mich sehr dumm, aber danke Ihnen allen für Ihre Hilfe trotzdem.

Henk hat meinen Code erheblich aufgeräumt und Beth hat mich zur Kenntnis genommen, dass es tatsächlich ein Problem mit der Abfrage gab (die Joins sind nicht richtig, aber es gibt immer noch Daten zurück).

Nochmals vielen Dank alle,

Gareth

EDIT: Im Anschluss an diese, waren die Tabellenzuordnungen (a Schlaf der Schlüssel zur Lösung dieses zu sein scheint!) So für die Zukunft jedermann:

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

fügt dem Datenadapter alle relevanten Tabellenzuordnungen hinzu und füllt sie jetzt ordnungsgemäß aus.

1

Versuchen Sie, die OnFillError Event-Handling. Ich bin mir nicht sicher, ob es helfen wird, aber es ist einen Versuch wert.

1

Sie sollten den Aufruf von conn.Open() entfernen und .Fill() die Verbindung öffnen lassen. Im Moment lässt du die Verbindung offen. Ich bin nicht sicher, ob es das Hauptproblem ist, aber Sie können bessere Fehlerberichte erhalten.

Außerdem können Sie das OracleCommand-Objekt eliminieren, da Sie es nicht wirklich verwenden. Der Adapter erstellt ein neues Command-Objekt.

+0

guter Punkt, in meiner Wut des Debuggens habe ich Code von überall kopiert. Jetzt aufgeräumt :) Danke – Gareth

1

Probieren Sie es ohne die Verknüpfungen und sehen, ob Sie die Ergebnisse erhalten erwar- Sie wählen locid aus gsh_vhs_comms wo Insert> sysdate-7 wenn die Fill-Methode mit dieser Abfrage funktioniert, versuchen Sie eine beitreten hinzufügen und sehen, ob es es bricht . Wenn dies der Fall ist, werden die Joins möglicherweise nicht unterstützt. Wenn nicht, ist etwas anderes los und die Konzentration auf die Joins führt Sie in die Irre.

1

Stimmen die Spaltennamen in Ihrem stark typisierten Dataset mit den in der Abfrage zurückgegebenen Spaltennamen überein?