Problem beim Abfragen der Anzahl von Datensätzen in einer Tabelle

02/09/2008 - 10:09 von Andrej Fraissl | Report spam
Folgendes SQL-Statement wird mittels der ExecuteScalar-Methode eines
SqlCommand-Objektes ausgeführt:

select count(*) from Tabelle1 where Spalte1= 0

Diese Abfrage wird ca. alle 15 Sekunden durchgeführt. Das Problem ist dass
manchmal das richtige Ergebnis geliefert wird (die tatsàchliche Anzahl der
Datensàtze) und manchmal -1. Warum liefert diese Abfrage manchmal -1 ?

Verwendet wird Windows 2003, SQL Server 2005 Express, VB.NET 2005

Dieser Effekt tritt aber nur auf wenn die Abfrage über VB.NET durchgeführt
wird. Im SQL Server Management Studio wird immer das richtige Ergebnis
geliefert.

Andrej
 

Lesen sie die antworten

#1 Elmar Boye
02/09/2008 - 12:15 | Warnen spam
Hallo Andrej,

Andrej Fraissl schrieb:
Folgendes SQL-Statement wird mittels der ExecuteScalar-Methode eines
SqlCommand-Objektes ausgeführt:

select count(*) from Tabelle1 where Spalte1= 0

Diese Abfrage wird ca. alle 15 Sekunden durchgeführt. Das Problem ist dass
manchmal das richtige Ergebnis geliefert wird (die tatsàchliche Anzahl der
Datensàtze) und manchmal -1. Warum liefert diese Abfrage manchmal -1 ?



Welche Seitenbedingungen gibt es da?

Denn von Haus aus liefert COUNT(*) immer einen Wert >= 0:
<URL:http://msdn.microsoft.com/de-de/library/ms175997(SQL.90).aspx>


Verwendet wird Windows 2003, SQL Server 2005 Express, VB.NET 2005

Dieser Effekt tritt aber nur auf wenn die Abfrage über VB.NET durchgeführt
wird. Im SQL Server Management Studio wird immer das richtige Ergebnis
geliefert.



Das làßt vermuten, dass in Deinem Code mehr versteckt ist als ein
schlichtes SqlCommand.ExecuteScalar.
Probiere es mal mit etwas schmalspurigem wie:

Private Function ExecuteCount() As Integer
// Verbindungszeichenfolge anpassen
Using connection As New SqlConnection(My.Settings.NorthwindConnectionString)
connection.Open()
Using command As New SqlCommand("select count(*) from Tabelle1 where Spalte1= 0 ", connection)
Return DirectCast(command.ExecuteScalar(), Integer)
End Using
End Using
End Function

Gruß Elmar

Ähnliche fragen