So get data aus gespeicherten Prozeduren in SQL server

Ich lese data aus meiner gespeicherten Prozedur. Wenn ich einen Haltepunkt einlege, bekomme ich diese Situation:

Bildbeschreibung hier eingeben

Die gespeicherte Prozedur gibt eine Zeile mit 8 Spalten zurück. Sie können das auf einem image sehen. Aber wenn ich versuche, einen Wert zu lesen:

var post_id = reader[4].ToString(); 

Ich habe diese exception:

Ungültiger Versuch zu lesen, wenn keine data vorhanden sind.

Mein model:

  public class Alarm { public long Id { get; set; } public DateTime StartDate { get; set; } public int Snoozes { get; set; } public bool Repeat { get; set; } public DateTime AlarmUpdateTime { get; set; } public virtual User User { get; set; } public virtual List<FacebookNotificationStatus> StatusUpdates { get; set; } } public class FacebookStatusUpdate { public long Id { get; set; } public DateTime FacebookUpdateTime { get; set; } public string PostId { get; set; } public DateTime? FacebookPostTime { get; set; } public DateTimeOffset ClientTime { get; set; } public int Offset { get; set; } public virtual FacebookNotificationStatus Status { get; set; } public virtual Alarm Alarm { get; set; } } 

Kann mir jemand helfen?

nach dem Ausführen von command.ExecuteReader () können Sie durchlaufen data mit dem nächsten Code (nur Beispiel):

 var rdr = command.ExecuteReader(); while(rdr.Read()) { var obj = new MyClass(); obj.Id = (int)rdr["Id"]; if (rdr["Name"] != DBNull.Value) { obj.name = (string)rdr["Name"]; } } rdr.Close(); 

Dieses Beispiel liest alle geholten data aus DB Zeile für Zeile.

Vergessen Sie auch nicht zu lesen lesen SqlDataReader Handbuch für weitere Informationen, wie man mit Lesern zu arbeiten.

Sie müssen den reader.Read() vor dem Lesen der datasätze.

Beispiel:

  String column1=""; String column2=""; while(reader.Read()) { column1 = reader["column1"].ToString(); column2 = reader["column2"].ToString(); } 

Der Umgang mit all den Feinheiten von ADO.NET macht keinen Spaß. ehrlich gesagt, ich vermute, Sie könnten es einfacher finden, etwas wie "dapper" zu verwenden, was erlaubt:

 using(var conn = ...) { return conn.Query<FacebookStatusUpdate>("GetPostList"), commandType: CommandType.StoredProcedure).ToList(); } 

(vorausgesetzt, dass die Spaltennamen eine direkte Übereinstimmung mit den Eigenschaftsnamen auf FacebookStatusUpdate )

Und für die Übergabe von Parametern:

 string region = ... DateTime minDate = ... using(var conn = ...) { return conn.Query<FacebookStatusUpdate>("GetPostList"), new { region, minDate }, commandType: CommandType.StoredProcedure).ToList(); }