Ich bekomme, dass wir using
verwenden können, um mehrere Befehle in einem sqlconnection
zu haben.Mehrere sqlcommands zurückgeben
So:
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command1 = new SqlCommand(commandText1, connection))
{
}
using (SqlCommand command2 = new SqlCommand(commandText2, connection))
{
}
// etc
}
Was aber, wenn die using
in einem Verfahren, das einen Leser Besetzung zurückkehrt?
So:
public IEnumerable<LocationInfo> GetData()
{
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Database"].ConnectionString))
{
//connection.Close();
connection.Open();
using (SqlCommand command = new SqlCommand(@"SELECT .... ", connection))
{
command.Notification = null;
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State == ConnectionState.Closed)
{ connection.Open(); }
using (var reader = command.ExecuteReader())
{
return reader.Cast<IDataRecord>().Select(x => new LocationInfo()
{
Names = x.GetString(2),
Values = Math.Round(x.GetDouble(7), 2).ToString("#,##0.00"),
ValuesDouble = x.GetDouble(7),
Values2 = Math.Round(x.GetDecimal(9), 2).ToString("#,##0.00"),
ValuesDouble2 = x.GetDecimal(9),
truckDelivery=x.GetDecimal(3),
truckIdle = x.GetDecimal(4),
truckRepair = x.GetDecimal(5),
truckReady = x.GetDecimal(6),
presentEmp=x.GetInt32(11),
absentEmp = x.GetInt32(12),
ondutyEmp = x.GetInt32(13),
}).ToList();
}
/* I tried this but it just got ignored
using (var reader2 = command.ExecuteReader())
{
reader2.NextResult();
return reader2.Cast<IDataRecord>().Select(x => new LocationInfo()
{
SumVol = x.GetString(0)
}).ToList();
}*/
}
}
}
Helfen Sie mir bitte. Meine zweite using
wird immer ignoriert und nicht davon ausgehen, dass ich etwas weiß, weil ich neu bin. Vielen Dank im Voraus.
Sie verpassen den Aufruf von reader.Read(). Es ist nicht klar, ob dieser Code gerade Datensätze oder eine Reihe von Datensätzen abruft. Im letzteren Fall benötigen Sie eine Schleife. – Steve
Zusätzlich zu dem, was Steve vorgeschlagen hat, wird das zweite 'using' ignoriert, da es im ersten' using' Block eine 'return' gibt, vielleicht ist dies der Grund, aus dem das Objekt zurückkommt der erste 'using'-Block und der darunter liegende Code wird ignoriert. – Aamir
Es macht eine Schleife, um Daten aus der Datenbank zu retreive, und auch in der Werte-Controller wie folgt verwendet: public class ValuesController: ApiController { LocationInfoRepository objRepo = new LocationInfoRepository(); // GET api/values öffentlich IEnumerable Get() { return objRepo.GetData(); } } Ich weiß, die Ursache der zweiten Verwendung von Ignoranz ist wegen der Return-Anweisung, wie muss ich es ändern, damit ich es beheben kann. Vielen Dank für Ihre Hilfe @Steve –
MVCNoob