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;
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.
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!
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 |
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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!
Ja das funktioniert problemlos, deshalb bin ich verwundert wieso es nicht mittels dem connectionString nicht klappt.
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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!
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." =)
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ja der Query wurde überprüft. Nach dem Fill zeigt das Datatable ein leeres DataGridview an.
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?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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
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.
Hast Du den SQL-Befehl schon im Management Studio ausprobiert ?
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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!
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:
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.
Ein einfaches Select * from Tabel liefert dir auch keine Daten zurück?
Sollte man mal gelesen haben:
Dann schau mal auf dem SQL Server ob da die Abfrage ausgeführt wird.
Sollte man mal gelesen haben:
Danke für Eure Hilfe das Problem hat sich erledigt. Es war ein Serverfehler.
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 |
.. ich bin auch gespannt, welcher Serverfehler das denn sein soll..
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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.