我从存储过程中读取数据。当我插入断点时,我得到了这种情况:
存储过程返回一行,包含8列。你可以在图片上看到这个。但是当我试图读取一个值时:
var post_id = reader[4].ToString();
我遇到了这个例外:
没有数据时无效尝试读取。
我的模特:
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; }
}
有人能帮助我吗?
答案 0 :(得分:2)
您需要在阅读记录之前致电reader.Read()
。
示例:强>
String column1="";
String column2="";
while(reader.Read())
{
column1 = reader["column1"].ToString();
column2 = reader["column2"].ToString();
}
答案 1 :(得分:2)
执行command.ExecuteReader()后,您可以使用下一个代码循环数据(只是示例):
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();
此示例逐行读取数据库中所有提取的数据。
另外,请不要忘记阅读阅读SqlDataReader manual,了解有关如何与读者合作的更多信息。
答案 2 :(得分:1)
处理ADO.NET的所有细微之处并不好玩;坦率地说,我怀疑你可能会发现使用像“dapper”这样的东西更容易,它允许:
using(var conn = ...)
{
return conn.Query<FacebookStatusUpdate>("GetPostList"),
commandType: CommandType.StoredProcedure).ToList();
}
(假设列名与FacebookStatusUpdate
上的属性名称直接匹配)
传递参数:
string region = ...
DateTime minDate = ...
using(var conn = ...)
{
return conn.Query<FacebookStatusUpdate>("GetPostList"),
new { region, minDate },
commandType: CommandType.StoredProcedure).ToList();
}