Wie gebe ich das Ergebnis der SELECT COUNT Anweisung als string in C#?
Frage ich mich, wie man das Ergebnis von SELECT COUNT Anweisung in C#.
Ich habe eine sql-Anweisung zurückgibt, die der Graf von 15.
Derzeit, ich fahre den datareader. Kann ich irgendwie das Ergebnis zurückgibt, dass, wie ein string?
static public SqlDataReader FillDataReader(string sql, SqlParameter[] parms)
{
SqlConnection conn = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader dr = null;
conn.Open();
cmd.CommandTimeout = 120; //120 seconds for the query to finish executing
foreach (SqlParameter p in parms)
{
cmd.Parameters.Add(p);
}
try
{
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (SqlException ex)
{
if (dr != null)
{
dr.Close();
}
conn.Close();
//DBUtilExceptionHandler(ex, sql);
throw ex;
}
finally
{
}
return dr; //This could be null...be sure to test for that when you use it
}
Oder könnte ich eine andere Methode. Ich weiß nur nicht, was es sein sollte.
Jede Hilfe ist willkommen.
Dies ist mein select-Anweisung:
select count(LeadListID) from LeadLists WHERE SalesPersonID = 1
AND LeadListDateCreated BETWEEN '9/1/11' AND '10/1/11 23:59:59'
- Sie sind auf der Suche für ExecuteScalar statt ExecuteReader
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicher - benutzen Sie einfach:
Hinweise:
using
Aussagen anstelle der manuellen try/catch/finally-Blöckeint
, nicht einstring
. Lassen Sie dem Anrufer stellen, dass die Konvertierung, wenn Sie möchtennull
Ich würde den code schreiben als:
Wenn Sie wirklich benötigt eine version der Arbeit auf einem beliebigen Daten-Leser, könnten Sie es schreiben als:
Dann rufen Sie es mit:
Sicher, Sie können immer anrufen, der
ToString()
Methode .NET auf dem einzigen Feld, wenn es zu Lesen:Sind es viele Datensätze, die Sie möchten, concat als string? Dann eine Schleife durch jede Zeile, schnappen Sie sich den Wert als string, und erstellen Sie ein master-string in einer for-Schleife Mode.
Da, Sie erwarten nur einen einzelnen Wert, eine bessere alternative zu
ExecuteReader
ist dieExecuteScalar
Methode:Wandeln Sie es als varchar in der sql:
oder rufen Sie einfach an .ToString() auf das Ergebnis, wie gezeigt, in anderen Antworten.
Außerdem bin ich kein fan von sich auf
CommandBehavior.CloseConnection
für DataReaders. Ich bevorzuge es code wie das:Verwenden ExecuteScalar statt, die zurückkehren wird, das erste Feld aus dem ersten Datensatz des recordset zurückgegeben, was Sie wollen. Das wird Sie wieder ein Objekt, das ist wirklich ein integer ist. Fügen Sie eine ToString-Methode, und Sie sollten gut sein.