Доброе утро, я создал свой первый общий метод, собранный из набора Google Searches. Я хотел бы, чтобы кто-то просмотрел это и дал мне знать, нарушаю ли я какие-либо основные правила или есть способы улучшить этот метод.
Метод вызывает хранимую процедуру в sql, а затем использует отражение для назначения свойств на основе значений, считанных из схемы DataReader. Хранимые процедуры закодированы так, что они возвращают точные имена свойств, ожидаемые классами. Вот код:
public static List<T> GetList<T>(string SQLServer, string DBName,
string ProcedureName, Dictionary<string, string> Parameters )
where T : new()
{
List<T> list = new List<T>();
//Setup connection to SQL
SqlConnection SqlConn = new SqlConnection(ConnectionString(SQLServer, DBName));
SqlCommand SqlCmd = new SqlCommand(ProcedureName, SqlConn);
SqlCmd.CommandType = System.Data.CommandType.StoredProcedure;
SqlDataReader reader;
//Process Parameters if there are any
foreach (KeyValuePair<string, string> param in Parameters)
{
SqlCmd.Parameters.AddWithValue(param.Key, param.Value);
}
SqlConn.Open();
reader = SqlCmd.ExecuteReader();
//Get The Schema from the Reader
//The stored procedure has code to return
//the exact names expected by the properties of T
DataTable schemaTable = reader.GetSchemaTable();
List<string> fields = new List<string>();
foreach (DataRow r in schemaTable.Rows)
{
fields.Add(r[0].ToString());
}
while (reader.Read())
{
T record = new T();
foreach (string field in fields)
{
//Assign the properties using reflection
record.GetType().GetProperty(field).SetValue(
record, reader[field],
System.Reflection.BindingFlags.Default,
null,null,null);
}
list.Add(record);
}
return list;
}