これは、クラスを作成し、データベースから情報を取得するために readRecord メソッドを使用してデータベース アクセス オブジェクトを作成する方法を (仕事で) 学んだ方法です。私が興味を持っているのは、それを短縮するためのSFコミュニティの推奨事項は何ですか? readRecord コードを DAO メソッドに移動し、そこで変更するだけで、数行のコードを取り除くことができますが、それでも数百行のコードが含まれる可能性があるという問題があります...クラス、および DAO でこれらのプロパティの値を取得します。
クラスで実際に行うことは何もないことを理解しています (つまり、一連のプロパティを自動生成することはできません... Visual Studio は私が何を作成しようとしているのかを知りません!)、しかし DAO については、クラス内のすべてのプロパティをループし、それらのタイプを決定してから情報を取得する方法はありますか? 何百回も「property = dr.GetVariableType("variablename");」と入力するのは大嫌いです。何度も何度も!
コードの長さについて申し訳ありません...私が話していることのアイデアを与えるために、プロパティを6回コピーしました。
クラス
namespace MySoftware
{
public class User
{
public int userId { get; set; }
public string userName { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public string MI { get; set; }
public string suffix { get; set; }
public string email { get; set; }
public string phone{ get; set; }
public string SSN { get; set; }
public int roleId { get; set; }
public bool IsTemp { get; set; }
public int userId { get; set; }
public string userName { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public string MI { get; set; }
public string suffix { get; set; }
public string email { get; set; }
public string phone{ get; set; }
public string SSN { get; set; }
public int roleId { get; set; }
public bool IsTemp { get; set; }
public int userId { get; set; }
public string userName { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public string MI { get; set; }
public string suffix { get; set; }
public string email { get; set; }
public string phone{ get; set; }
public string SSN { get; set; }
public int roleId { get; set; }
public bool IsTemp { get; set; }
public int userId { get; set; }
public string userName { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public string MI { get; set; }
public string suffix { get; set; }
public string email { get; set; }
public string phone{ get; set; }
public string SSN { get; set; }
public int roleId { get; set; }
public bool IsTemp { get; set; }
public int userId { get; set; }
public string userName { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public string MI { get; set; }
public string suffix { get; set; }
public string email { get; set; }
public string phone{ get; set; }
public string SSN { get; set; }
public int roleId { get; set; }
public bool IsTemp { get; set; }
public int userId { get; set; }
public string userName { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public string MI { get; set; }
public string suffix { get; set; }
public string email { get; set; }
public string phone{ get; set; }
public string SSN { get; set; }
public int roleId { get; set; }
public bool IsTemp { get; set; }
}
}
ダオ
namespace MySoftware
{
public static List<User> GetUsers(int departmentId)
{
List<User> user = new List<User>();
try
{
using (SqlConnection conn = ConnectionHelper.GetConnection("connectionString"))
{
SqlCommand cmd = new SqlCommand("GetUsers", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@DeptId", departmentId);
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
users.Add(readUserRecord(dr));
}
}
return users;
}
}
catch (Exception ex)
{
throw new Exception("Failed to get users", ex);
}
}
}
次に、レコードを読み取ります (これは通常、DAO の下部にあります。
public static User ReadRegRecord(SqlDataReader dr)
{
User user = new User();
user.userId = dr.GetInt32("Id");
user.userName = dr.GetString("UserName");
user.schoolId = dr.GetInt32("schoolId");
user.roleId = dr.GetInt32("roleId");
user.Active = dr.GetBoolean("Active");
user.IsTemp = dr.GetBoolean("IsTemp ");
user.firstName = dr.GetString("firstName");
user.MI = dr.GetString("MI");
user.lastName = dr.GetString("lastName");
user.suffix = dr.GetString("Suffix");
user.email = dr.GetString("email");
user.Phone = dr.GetString("Phone ");
user.SSN = dr.GetString("SSN");
user.userId = dr.GetInt32("Id");
user.userName = dr.GetString("UserName");
user.schoolId = dr.GetInt32("schoolId");
user.roleId = dr.GetInt32("roleId");
user.Active = dr.GetBoolean("Active");
user.IsTemp = dr.GetBoolean("IsTemp ");
user.firstName = dr.GetString("firstName");
user.MI = dr.GetString("MI");
user.lastName = dr.GetString("lastName");
user.suffix = dr.GetString("Suffix");
user.email = dr.GetString("email");
user.Phone = dr.GetString("Phone ");
user.SSN = dr.GetString("SSN");
user.userId = dr.GetInt32("Id");
user.userName = dr.GetString("UserName");
user.schoolId = dr.GetInt32("schoolId");
user.roleId = dr.GetInt32("roleId");
user.Active = dr.GetBoolean("Active");
user.IsTemp = dr.GetBoolean("IsTemp ");
user.firstName = dr.GetString("firstName");
user.MI = dr.GetString("MI");
user.lastName = dr.GetString("lastName");
user.suffix = dr.GetString("Suffix");
user.email = dr.GetString("email");
user.Phone = dr.GetString("Phone ");
user.SSN = dr.GetString("SSN");
user.userId = dr.GetInt32("Id");
user.userName = dr.GetString("UserName");
user.schoolId = dr.GetInt32("schoolId");
user.roleId = dr.GetInt32("roleId");
user.Active = dr.GetBoolean("Active");
user.IsTemp = dr.GetBoolean("IsTemp ");
user.firstName = dr.GetString("firstName");
user.MI = dr.GetString("MI");
user.lastName = dr.GetString("lastName");
user.suffix = dr.GetString("Suffix");
user.email = dr.GetString("email");
user.Phone = dr.GetString("Phone ");
user.SSN = dr.GetString("SSN");
user.userId = dr.GetInt32("Id");
user.userName = dr.GetString("UserName");
user.schoolId = dr.GetInt32("schoolId");
user.roleId = dr.GetInt32("roleId");
user.Active = dr.GetBoolean("Active");
user.IsTemp = dr.GetBoolean("IsTemp ");
user.firstName = dr.GetString("firstName");
user.MI = dr.GetString("MI");
user.lastName = dr.GetString("lastName");
user.suffix = dr.GetString("Suffix");
user.email = dr.GetString("email");
user.Phone = dr.GetString("Phone ");
user.SSN = dr.GetString("SSN");
user.userId = dr.GetInt32("Id");
user.userName = dr.GetString("UserName");
user.schoolId = dr.GetInt32("schoolId");
user.roleId = dr.GetInt32("roleId");
user.Active = dr.GetBoolean("Active");
user.IsTemp = dr.GetBoolean("IsTemp ");
user.firstName = dr.GetString("firstName");
user.MI = dr.GetString("MI");
user.lastName = dr.GetString("lastName");
user.suffix = dr.GetString("Suffix");
user.email = dr.GetString("email");
user.Phone = dr.GetString("Phone ");
user.SSN = dr.GetString("SSN");
return user;
}
}
たとえば、DAO/readRecord に対してこのようなことを行う方法はありますか? (これがうまくいかないことはわかっていますが、誰かが似たようなことを考えられるなら、ぜひ聞きたいです)。
foreach (var prop in student.GetType().GetProperties())
{
if (prop.PropertyType == "String")
{
prop.Value = dr.GetString(prop.Name.ToString());
}
if (prop.PropertyType == "Int")
{
prop.Value = dr.GetInt32(prop.Name.ToString());
}
}