Toon posts:

[C#] SQLite - weergeven van row count na een query

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik probeer het aantal rows te tellen na een query op een SQlite database table van de rows waarbij het TEXT field (bevat strings) uit een bepaalde kolom LEEG is. De value van de rowcount variabele is na uitvoeren steeds de som van ALLE rows uit de database (in dit geval 22), maar dit klopt niet.

Heb volgende C# Code, deze maakt gebruik van de meest recente SQLite reference DLL.

int rowcount = 0;
sqlquery = "SELECT Count(Id) FROM '" + currenttable + "' WHERE MyColumn IS NOT NULL;";
sqliteCommand.CommandText = sqlquery;
rowcount = Convert.ToInt32(sqliteCommand.ExecuteScalar());

Heb alle mij reeds bekende methoden geprobeerd, ook deze van hier:
http://stackoverflow.com/...-in-my-sqlite-reader-in-c
maar blijven allemaal foute getallen returnen, heb zowel met ExecuteScalar (value 22) als met ExecuteNonQuery (error value -1, geen idee waarom) getest...

Zou dit eigen zijn aan SQLite zoals bovenstaande URL mij vertelde, of is het bepalen van de row count van een query toch nog op een andere manier mogelijk?

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 01:12
Je wilt een count doen van alle rows waarbij het text field leeg is, maar je query doet exact het tegenovergestelde?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
was typfoutje, moest IS NULL zijn natuurlijk.
btw heb ook al met een datatable geprobeerd, helaas lukt me niet :(

Acties:
  • 0 Henk 'm!

  • 0xDEADBEEF
  • Registratie: December 2003
  • Niet online
Waarom COUNT je op 'Id'? :)

Voer de query anders eens uit op een command line.

[ Voor 55% gewijzigd door 0xDEADBEEF op 20-11-2015 01:19 ]

"Religion is an insult to human dignity. With or without it you would have good people doing good things and evil people doing evil things. But for good people to do evil things, that takes religion." - Steven Weinberg


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:17

Haan

dotnetter

Vroeg ik me ook af inderdaad, waarom niet count(*)?

Geeft een query met een andere WHERE clause wel het juiste resultaat. Ik weet even niet of het kan met SQLite, maar kan je de query ook met SQL Management Studio runnen?

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Cloud
  • Registratie: November 2001
  • Laatst online: 07-10 14:42

Cloud

FP ProMod

Ex-moderatie mobster

Weet je zeker dat die column uitsluitend NULL-waarden bevat als deze leeg is? Kan het niet zijn dat er lege strings in staan, want zo ja; die tel je nu niet mee namelijk.

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Acties:
  • 0 Henk 'm!

  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 29-12-2024
Zoals eerder aangegeven. In je huidige query neem je juist alle records mee die wel een waarde hebben in de betreffende column (want er staat IS NOT NULL), dus begin maar eens om dat te veranderen in IS NULL.

Dat ExecuteNonQuery een fout geeft is niet raar. Die is vooral bedoeld voor statements als UPDATE, INSERT en DELETE... en in geen geval voor queries die resultaten retouneren.

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 11-10 16:49
Cloud schreef op vrijdag 20 november 2015 @ 08:51:
Weet je zeker dat die column uitsluitend NULL-waarden bevat als deze leeg is? Kan het niet zijn dat er lege strings in staan, want zo ja; die tel je nu niet mee namelijk.
Hier ben ik ook nog weleens nat op gegaan in het verleden, NULL is immers niet hetzelfde als ''

Acties:
  • 0 Henk 'm!

  • maxtz0r
  • Registratie: Februari 2007
  • Laatst online: 17-12-2022
ISNULL(MyColumn,'') = ''

Dying is God's way of telling you, you've been FIRED.


Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 23:58
Laurens-R schreef op vrijdag 20 november 2015 @ 09:23:
Zoals eerder aangegeven. In je huidige query neem je juist alle records mee die wel een waarde hebben in de betreffende column (want er staat IS NOT NULL), dus begin maar eens om dat te veranderen in IS NULL.

Dat ExecuteNonQuery een fout geeft is niet raar. Die is vooral bedoeld voor statements als UPDATE, INSERT en DELETE... en in geen geval voor queries die resultaten retouneren.
Met de meeste DB-drivers geven die echter ook resultaat terug, maar dan een rowcount oid. UPDATE kan bijvoorbeeld teruggeven dat hij "x aantal records" updated heeft.
Ik gok dan ook dat de aanroep misgaat bij het mappen van de resultset naar wat de TS eruit wil krijgen (een list van objects) terwijl er een int oid uit zal komen. Dit werd me echter niet duidelijk uit de "hij geeft een fout".

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
thx voor de info; ondertussen heb ik het vermelden van aantal rows weggelaten, was eigenlijk niet echt zo belangrijk, en de rest van de method werkt wel wanneer de rowcount > 0.
Pagina: 1