我正在嘗試使用 Ado.net 從 Azure 資料庫中獲取記錄,為此我使用了SqlDataReader類。即使資料獲取成功,我也不知道如何將其轉換為通用串列。
protected List<T> GetList<T>()
{
try
{
using (var query = ExecuteReader())
{
// What Goes Here ?
}
}
finally
{
if (_sqlCommand.Connection.State == ConnectionState.Open)
{
_sqlCommand.Connection.Close();
}
}
}
ExecuteReader 方法,
protected SqlDataReader ExecuteReader()
{
if (_sqlCommand.Connection.State != ConnectionState.Open)
{
_sqlCommand.Connection.Open();
}
return _sqlCommand.ExecuteReader();
}
資料模型,
public class Student
{
[EntityKey]
public int StudentId { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Major { get; set; }
}
注意:我想知道是否還有其他簡單的方法
uj5u.com熱心網友回復:
SqlDataReader 不是容器,它是用于加載資料的游標。它不能轉換為任何容器型別。應用程式代碼必須使用它來加載結果,然后構造物件并將它們放在一個串列中。這在 ADO.NET 檔案中有所描述,例如在使用 DataReader 檢索資料中:
var list=new List<Student>();
if (reader.HasRows)
{
while (reader.Read())
{
var student=new Student();
student.Id=reader.GetInt32(0);
student.Name = reader.GetString(1));
...
}
}
else
{
Console.WriteLine("No rows found.");
}
這是很多樣板,這就是為什么使用像物體框架這樣的 ORM 或像Dapper這樣的微 ORM來執行查詢并將結果映射到物件的原因。
使用 Dapper,所有這些代碼都可以替換為:
var sql="Select * from Students where Major=@major";
var students=connection.Query<Student>(sql,new {major="Computer Science"});
Dapper 將使用引數創建引數化查詢@major,執行它,從結果構造Student物件并將它們作為IEnumerable<Student>. 它甚至負責打開和處理連接。
Dapper 通過使用反射來識別型別的屬性,使用它們的名稱來加載正確的欄位并將它們分配給它創建的物件。
uj5u.com熱心網友回復:
while (query.Read())
{
Console.WriteLine($"First column {query[0]}");
Console.WriteLine($"Named column {query["put a columnname here"]}");
}
Read() 將為您提供第一行和下一行。
uj5u.com熱心網友回復:
var dt=new DataTable();
dt.Load(myDataReader);
list<DataRow> dr=dt.AsEnumerable().ToList();
或者
public DataReaderToListModel()
{
StudentList = new ObservableCollection<StudentModel>();
LoadData();
}
public ObservableCollection<StudentModel> StudentList { get; set; }
#region Varible declarations
private SqlConnection _sqlConnection;
private SqlCommand _sqlCommand;
private SqlDataReader _sqlDataReader;
private string _strsqlcommand;
#endregion
#region Method for Getting the data from Database
public void LoadData()
{
try
{
// Connection Strings
// Connecting to DB
_sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConString"].ConnectionString);
if (_sqlConnection.State != ConnectionState.Open)
_sqlConnection.Open();
_strsqlcommand = "Your Query";
_sqlDataReader = _sqlCommand.ExecuteReader();
var studentmodellist = new ObservableCollection<StudentModel>();
while (_sqlDataReader.Read())
{
var studentModel = new StudentModel
{
StudentId = _sqlDataReader.GetInt32(_sqlDataReader.GetOrdinal("StudentId ")),
Name= _sqlDataReader.GetString(_sqlDataReader.GetOrdinal("Name")),
Age= _sqlDataReader.GetInt32(_sqlDataReader.GetOrdinal("Age")),
Major = _sqlDataReader.GetString(_sqlDataReader.GetOrdinal("Major"))
};
studentmodellist.Add(studentModel);
}
StudentList = studentmodellist;
_sqlConnection.Close();
}
catch (Exception exception)
{
MessageBox.Show("DataLoading Failed beacause of following Reason \n" exception.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
#endregion
請參閱SO 執行緒以獲取更多資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/475299.html
標籤:C# asp.net-mvc 天蓝色 ado.net
下一篇:WPF中的依賴屬性
