我不确定这个问题的标题是否对任何人都有意义。
我的代码中的每个类都代表一个 SQL Server 数据库中的表,类属性是数据字段。我有几种方法对我编写的大多数类都是通用的,即 Populate、Update、Save 等。到目前为止还没有什么新东西。
然而,在开发周期中,甚至在我的软件实施之后,相对常见的情况是需要在其中一个表中添加一个额外的字段,从而在相应的类中添加一个额外的属性。这意味着我必须通过 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();
}
图像需要向这个我的类添加一个新字段,因此上面的 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();
}
}
}
}
}
有没有人可以提供任何建议我如何在这里实现我的编码目标?我应该以一种完全不同的方式来解决这个问题吗?还是我想要实现的目标根本不可能?