Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - ADO.Net Problem bei COUNT Abfrage
mutterholzbein - Do 01.12.11 14:03
Titel: ADO.Net Problem bei COUNT Abfrage
Hallo Community,
ich habe ein Problem mit einem Tool für einen Kunden von uns, und hoffe Ihr könnt mir weiterhelfen. Dieses Tool erzeugt eine CSV-Datei anahnd einer gespeicherten Abfrage aus einer Access-DB.
Um das Tool so allgemeingültig wie möglich zu halten habe ich einen COUNT Befehl integriert um die Größe der später benötigten Arrays dynamisch anpassen zu können. Soweit so gut, nun kam aber das Problem auf, dass bei einer Abfrage mit nur einem Resultat (in Acces getestet) ich trotzdem einen Wert zurück bekomme der größer ist als er sein kann/darf!
In der Db gibt es eine Abfrage die Produkte mit ean usw. aus vielen anderen Abfragen korrekt holt und erzeugt. Wenn ich jetzt aber eine Testabfrage mache:
Quelltext
1:
| SELECT * FROM [NAME_DER_ABFRAGE] WHERE product_id='123'; |
bekomme ich genau ein Resultat (klar), allerdings im Tool, und das ist das Problem, erhalte ich einen Wert von 776 (was der korrekte Wert aus NAME_DER_ABFRAGE ist) wenn ich folgendes OleDbCommand nutze:
C#-Quelltext
1:
| ...count = new OleDbCommand("SELECT COUNT(*) AS cnt FROM [" + NAME_DER_TESTABFRAGE + "]", verb); |
. Ausgewertet wird die Abfrage über einen OleDbDataReader in einer while-Schleife:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| OleDbDataReader cnt = count.ExecuteReader(); ... while (cnt.Read()) { val = cnt["cnt"].ToString();#if DEBUG lbResult.Items.Add(val); #endif } cnt.Close(); |
Wenn ich die gleiche COUNT-Abfrage in Access mache bekomme ich das korrekte Resultat (1).. wo liegt also mein Fehler? :shock:
Danke für eure Hilfe...
greetz, me
mutterholzbein - Do 01.12.11 16:26
Hoi,
nun ja, am besten wäre natürlich die korrekte Ausgabe, in dem Bsp. also 1 (welche sich ja, z.b. abhängig von der WHERE-Klausel, ändern kann).
ExecuteScalar() hatte ich zu Beginn drin -> selbes Ergebnis.
Trashkid2000 - Do 01.12.11 17:09
Hi,
also eine (gespeicherte) Access-Abfrage wird ja als Stored Procedure abgelegt.
Also musst Du diese auch so aufrufen.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| using (OleDbConnection conn = new OleDbConnection(connectionString)) { using (OleDbCommand command = conn.CreateCommand()) { command.CommandType = CommandType.StoredProcedure; command.CommandText = NAME_DER_TESTABFRAGE;
... } } |
Die Einschränkungen könntest Du z.B. als Parameter an die SP übergeben.
mutterholzbein - Fr 02.12.11 10:58
hmm,
werde das nochmal prüfen... Aber ist es nicht eigentlich so, das wenn eine Abfrage im dem SQL-String mit eckigen Klammern eingeschlossen ist, diese schon als gespeicherte Abfrage markiert ist und auch erkannt wird?
Danke erstmal für den Denkanstoß.
greetz, me
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!