Datareaderを使用してSQLデータベースからデータを取得し、Datatableにデータを入力する作業をしました。しかし、datatableを使用せずにDatareaderからデータを処理する方法があるかどうか疑問に思っています。 つまり、オブジェクトを使用してテーブル値を処理する方が望ましいはずです。
ただし、ここではLINQを使用したくないので、データベース(キューブ)からデータをプルするためにADOMDオブジェクトを使用します。
Datareaderを使用してSQLデータベースからデータを取得し、Datatableにデータを入力する作業をしました。しかし、datatableを使用せずにDatareaderからデータを処理する方法があるかどうか疑問に思っています。 つまり、オブジェクトを使用してテーブル値を処理する方が望ましいはずです。
ただし、ここではLINQを使用したくないので、データベース(キューブ)からデータをプルするためにADOMDオブジェクトを使用します。
dapper-dot-netをご覧ください。ADOMD.NETでどのように機能するかはわかりませんが、動的オブジェクトでクエリ結果を適切に実体化します。
アイテムをループして、カスタムクラスのプロパティ値として設定するだけです。次の例では、Customerテーブルからデータを読み取り、CustomerClassオブジェクトのリストを作成します。プロパティとしてIDと名前を持つ顧客POCOがあると仮定します
List<Customer> custList= new List<Customer>();
string connString="yourConnectionStringHere";
using (var conn = new SqlConnection(connString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT ID,NAME From Customer";
using (var reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
var cust= new Customer();
if (!reader.IsDBNull( reader.GetOrdinal("ID")))
cust.ID = reader.GetInt32(reader.GetOrdinal("ID"));
if (!reader.IsDBNull( reader.GetOrdinal("Name")))
cust.Name = reader.GetString(reader.GetOrdinal("Name"));
custList.Add(cust);
}
}
}
}
}
public List GetEmployee(string spname){
con.Open();
cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = spname;
cmd.CommandType = CommandType.StoredProcedure;
reader = cmd.ExecuteReader();
List<EmployeeDetails> lstemp = new List<EmployeeDetails>();
while (reader.Read())
{
EmployeeDetails emp = new EmployeeDetails();
emp.EmployeeId =Convert.ToInt32( reader["EmployeeId"].ToString());
emp.FirstName = reader["FirstName"].ToString();
emp.LastName = reader["LastName"].ToString();
emp.DOB = Convert.ToDateTime(reader["DOB"].ToString());
emp.Gender = Convert.ToInt32(reader["Gender"].ToString());
emp.QName = reader["QName"].ToString();
emp.Dname = reader["DName"].ToString();
emp.Email = reader["Email"].ToString();
lstemp.Add(emp);
}
return lstemp;
}