この質問の見出しが誰にとっても意味があるかどうかはわかりません。
私のコードの各クラスはSQLサーバーデータベースのテーブルを表し、クラスのプロパティはデータフィールドです。私が書いているほとんどのクラスに共通するいくつかのメソッドがあります。つまり、Populate、Update、Saveなどです。これまでのところ、新しいものはありません。
ただし、開発サイクル中およびソフトウェアの実装後でも、テーブルの1つにフィールドを追加し、対応するクラスにプロパティを追加する必要があるのは比較的一般的です。これは、新しいフィールドを追加するために、Populate、Update、Saveメソッドを実行する必要があることを意味します。例:-
private void Save()
{
SqlConnection linkToDB = new SqlConnection(connString);
linkToDB.Open();
string sqlText = "INSERT INTO table (ID, Field1, Field2) VALUES (@ID, @Field1, @Field2);";
SqlCommand sqlCom = new SqlCommand(sqlText, linkToDB);
sqlCom.Parameters.Add("@ID", SqlDbType.Int).Value = this._id;
sqlCom.Parameters.Add("@Field1",SqlDbType.VarChar).Value = this._field1;
sqlCom.Parameters.Add("@Field2", SqlDbType.VarChar).Value = this._field2;
sqlCom.ExecuteNonQuery();
linkToDB.Close();
linkToDB.Dispose();
}
このmyクラスに新しいフィールドを追加する必要が生じたため、上記のSAVEメソッドではsqlTextを修正し、sqlComに新しいパラメーターを追加する必要があります。UPDATEメソッドとPOPULATEメソッド、およびClassプロパティに対応するパラメーターの完全なセットを持つその他のメソッドにも同じ変更を加える必要があります。
だから私の質問はこれです。。。
クラスにそれ自体のプロパティを認識して反復させ、それぞれに正しいタイプのパラメーターを作成させる方法はありますか?私はいくつかのコードを開始しましたが(コンパイルされないことがわかっています)、行き詰まりました。ここが私が立ち上がったところです。
private void Populate()
{
SQLExpress exp = new SQLExpress();
using (SqlConnection linkToDB = exp.DatabaseConnection)
{
string sqlText = "SELECT * FROM " + this._table + " WHERE ID = @ID;";
SqlCommand sqlCom = new SqlCommand(sqlText, linkToDB);
linkToDB.Open();
using (SqlDataReader reader = sqlCom.ExecuteReader())
{
while (reader.Read())
{
Type type = this.GetType();
foreach (PropertyInfo propertyInfo in type.GetProperties())
{
string propName = propertyInfo.Name;
Type propType = propertyInfo.GetType();
//this.propName = (propType)reader[propName];
//Type propType = propertyInfo.GetType();
}
}
}
}
}
ここでコーディングの目標を達成する方法についてアドバイスをくれる人はいますか?私はおそらくこれを完全に異なる方法で行うべきですか?それとも、私が達成しようとしていることは単純に不可能ですか?