Laden...

Datenbankabfrage mit SqlDataAdapter liefert keine Daten zurück [==> Serverfehler]

Erstellt von myworld vor 7 Jahren Letzter Beitrag vor 7 Jahren 5.339 Views
M
myworld Themenstarter:in
41 Beiträge seit 2013
vor 7 Jahren
Datenbankabfrage mit SqlDataAdapter liefert keine Daten zurück [==> Serverfehler]

verwendetes Datenbanksystem: <SQL Server>

Hallo,

Ich versuche eine Verbindung zwischen einer Datenbank mittels Connection String, das in einer app.config ist herzustellen. Das Problem aber ist das die variable adapter null zurückgibt und so die gewünschten Daten nicht eingelesen werden. Ich finde keinen Fehler im Code.

Edit: Der ConnectionString wird eingelesen.

Bitte um Hilfe!


DataTable ds;

string con = System.Configuration.ConfigurationManager.ConnectionStrings["dbConnect"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(con))
            {
                SqlDataAdapter adapter;
                adapter = new SqlDataAdapter("select a.aaa, m.bbb, m.ccc m.ddd From lst_mdmel_lis_tab m with (nolock) inner join lst_absae_tab a with (nolock) on a.id = m.id where m.bbb>= '30' and m.fff= '35' order by a.aaa", conn);


                ds = new DataTable(" ");
                adapter.Fill(ds);
                dataGridView1.DataSource = ds;

T
2.224 Beiträge seit 2008
vor 7 Jahren

Mal davon abgesehen, dass du keine festen Werte in den SQL String schreiben solltest, scheinst deine Connection String aber korrekt zu sein.
Aber ich sehe nicht, dass du die Verwendete Connection öffnest.
Normalerweise solltest du mal mit conn.Open(); die Verbindung aufbauen.
Bin jetzt nicht sicher ob das der SqlDataAdapter macht.
Ebenfalls kannst du die Deklaration und die Initalisierung deines adapter auch in eine Zeile schreiben.



string con = System.Configuration.ConfigurationManager.ConnectionStrings["dbConnect"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(con))
            {
                conn.Open();
                SqlDataAdapter adapter = new SqlDataAdapter("select a.aaa, m.bbb, m.ccc m.ddd From lst_mdmel_lis_tab m with (nolock) inner join lst_absae_tab a with (nolock) on a.id = m.id where m.bbb>= '30' and m.fff= '35' order by a.aaa", conn);

                DataTable dt = new DataTable();
                adapter.Fill(dt);
                dataGridView1.DataSource = dt;

Anbei solltest du deinen Code dann auch noch in das drei Schichten Modell überführen.
Durch den Code sehe ich schon, dass du scheinbar in deiner UI auch die ganzen DB Abfragen stehen hast, was ein unsauberer Stil ist und deine Anwendung sehr Wartungsunfreundlich sowie Wiederverwendbarkeit unmöglich macht.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

M
myworld Themenstarter:in
41 Beiträge seit 2013
vor 7 Jahren

Danke für die Antwort. Ich habe es vorher mit conn.Open und Close versucht hat aber keine Änderung gebracht. Und das SqlAdapter war vorher in der gleichen Zeile wollte es nur testweise so versuchen.

edit: Das ist nur eine Testphase deshalb ist es so hingeschmiert, erst wenn die Verbindung klappt werde ich mich um die anderes Sachen kümmren.

Danke!

2.298 Beiträge seit 2010
vor 7 Jahren

Hallo myworld,

ich habe deinen Quelltext mal 1 zu 1 übernommen, das Select angepasst und einen ConnectionString auf eine unserer Datenbanken verwendet.

Dein Code, so wie er ist funktioniert und liefert auch die Daten zurück. Mir scheint das Problem hier an anderer Stelle zu liegen.

Bist du dir sicher, dass deine DataTable "NULL" ist und nicht einfach nur keine Zeilen enthält?

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

16.834 Beiträge seit 2008
vor 7 Jahren

Wenn die Verbindung bei Open nicht knallt, dann stimmt der ConnectionString.

SqlDataAdapter adapter;
                adapter = new SqlDataAdapter("

adapter kann an dieser Stelle nicht null sein. Das ist nicht möglich.

Das Problem wird was völlig anderes sein.

M
myworld Themenstarter:in
41 Beiträge seit 2013
vor 7 Jahren

Leider hätte ich keine Idee was falsch sein könnte. Ich weiß nur das Adapter keine Daten übergibt die Datatable ist zwar nicht null aber es werden keine Werte angezeigt.

Danke!

J
251 Beiträge seit 2012
vor 7 Jahren

Testweise versucht via Abrufen von Daten mit einem DataReader an Daten ranzukommen?

M
myworld Themenstarter:in
41 Beiträge seit 2013
vor 7 Jahren

Ja das funktioniert problemlos, deshalb bin ich verwundert wieso es nicht mittels dem connectionString nicht klappt.

16.834 Beiträge seit 2008
vor 7 Jahren

Der ConnectionString wird damit nichts zutun haben, sonst gäbe es eine Exception.
Auch ist null was ganz anderes als leer - bitte sei hier präziser, ansonsten können die Leute Dir hier nur schwer helfen.

Viel Wahrscheinlicher ist, dass der Query fehlerhaft ist und nicht der ConnectionString.

M
myworld Themenstarter:in
41 Beiträge seit 2013
vor 7 Jahren

Leider kann ich mich auch nicht klarer ausdrücken weil ich selber nicht weiß was da genau los ist. Ich kann mit 100% Sicherheit sagen das der Query in Ordnung ist. Aber ich habe keine Ahnung was ich machen soll weil keine Fehlermedlung kommt. Kann mir jemand sagen wo ich genau schauen soll?

Danke!

16.834 Beiträge seit 2008
vor 7 Jahren

Wieso bist Du Dir sicher, dass der Query 100% OK ist? Geprüft oder nur ne Vermutung?
Was genau zeigt denn DataTable nach dem Fill im Debugger an?

Deine Beschreibung ist aktuell folgendermaßen vergleichbar:
"Mein Auto fährt nicht mehr aber das Fenster geht noch hoch und runter. Es ist bestimmt ein defektes Radio." =)

M
myworld Themenstarter:in
41 Beiträge seit 2013
vor 7 Jahren

Ja der Query wurde überprüft. Nach dem Fill zeigt das Datatable ein leeres DataGridview an.

16.834 Beiträge seit 2008
vor 7 Jahren

Ich wollt wissen, was das DataTable im Debugger anzeigt. Von Grid war noch gar nicht die Rede.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?

3.825 Beiträge seit 2006
vor 7 Jahren

Da hilft nur, wie fast immer, Schritt für Schritt überprüfen.

Die Connection und der SQL Befehl sind in Ordnung wenn sie keine Exception werfen.

Hast Du den SQL-Befehl schon im Management Studio ausprobiert ?

Wieviele Zeilen enthält das Table nach dem Fill ?

var count = dt.Rows.Count;

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

M
myworld Themenstarter:in
41 Beiträge seit 2013
vor 7 Jahren

ich rede ja auch von der Datatable. Wenn ich beim Debugger zum Cursor damit gehe erscheint so eine lupe und da wird ein leeres datagrid angezeigt. Ich weiß jetzt nicht genau wo ich sonst noch schauen sollte.

M
myworld Themenstarter:in
41 Beiträge seit 2013
vor 7 Jahren

Da steht das es null Zeilen hat

3.825 Beiträge seit 2006
vor 7 Jahren

Hast Du den SQL-Befehl schon im Management Studio ausprobiert ?

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

M
myworld Themenstarter:in
41 Beiträge seit 2013
vor 7 Jahren

Ja da werden normal die 7000 Zeilen angezeigt

16.834 Beiträge seit 2008
vor 7 Jahren

Irgendwas passt hier an Deinen Erklärungen nicht; und am Code liegts offensichlich nicht.
Der wurde hier ja von anderen in eigenen Umgebungen bereits geprüft - der funktioniert in dieser hier gezeigten Form.

M
myworld Themenstarter:in
41 Beiträge seit 2013
vor 7 Jahren

Ich wüsste nicht was ich übersehen habe aber das ist alles was ich weiß. Wenn mir jemand sagen könnte nach was ich genau beim Debugger Ausschau halten soll wäre mir vielleicht schon ein bisschen geholfen.

Danke!

P
1.090 Beiträge seit 2011
vor 7 Jahren

Nun da der Code schon von jemand anderen ausprobiert wurde, scheint er ja grundlegen zu stimmen.

Es kann also nur an den Connection String oder der Abfragen liegen.

Da die Connection keine Excepption wirft, scheint die Verbindung zu einer Datenbank mit den Tabellen zu funktionieren. Hier kannst du mal schauen ob es sich nicht um eine "Kopie" der DB handelt mit anderen Daten.

Wenn du sicher bist, das es sich um die richtige Datenbank handelt.

Beleibt eigentlich nur das Select. Hier kannst du zur Vereinfachung einfach mal das where weg lass und schauen ob dann Daten kommen. Wenn nicht vereinfach mal die Abfrage weiter.

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

M
myworld Themenstarter:in
41 Beiträge seit 2013
vor 7 Jahren

Ja es handelt sich um die richtige Datenbank und der SQL Query habe ich auf verschiedenen weisen geprüfft und verändert. Es liegt also nicht an dem.

P
1.090 Beiträge seit 2011
vor 7 Jahren

Ein einfaches Select * from Tabel liefert dir auch keine Daten zurück?

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

M
myworld Themenstarter:in
41 Beiträge seit 2013
vor 7 Jahren

ja es werden keine Daten zurückgegeben.

P
1.090 Beiträge seit 2011
vor 7 Jahren

Dann schau mal auf dem SQL Server ob da die Abfrage ausgeführt wird.

Die letzten ausgeführten SQL-Abfragen anzeigen

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

M
myworld Themenstarter:in
41 Beiträge seit 2013
vor 7 Jahren

Danke für Eure Hilfe das Problem hat sich erledigt. Es war ein Serverfehler.

2.298 Beiträge seit 2010
vor 7 Jahren

Was denn für ein Serverfehler? Und hätte ein Serverfehler nicht in einer Exception enden müssen?

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

16.834 Beiträge seit 2008
vor 7 Jahren

.. ich bin auch gespannt, welcher Serverfehler das denn sein soll..

M
myworld Themenstarter:in
41 Beiträge seit 2013
vor 7 Jahren

Ich habe keine Ahnung was der Fehler ist er ist noch nicht behoben. Ich habe jedeglich einen anderen Server benutzt und das hat problemlos funktioniert, deshalb gehe ich davon aus das was mit dem Server nicht stimmt.