[AttributeUsage(AttributeTargets.Property)]
//Models 特性
public class CanWriteAttribute : Attribute
{
public bool CanWrite { get; set; }
}
public System.Data.SqlClient.SqlParameter[] AddParameter<T>(T Models)
{
List<System.Data.SqlClient.SqlParameter> List = new List<System.Data.SqlClient.SqlParameter>();
object objModels = Models;
Type type = objModels.GetType();
//Visual Basic
//System.Reflection.PropertyInfo[] PInfo = type.GetProperties(BindingFlags.NonPublic OR BindingFlags.Instance OR BindingFlags.Static);
//Visual C# 必须使用 BindingFlags.Public|BindingFlags.GetProperty|BindingFlags.Instance
PropertyInfo[] PInfo = type.GetProperties(BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Instance);
foreach (PropertyInfo item in PInfo)
{
if (item == null)
{
continue;
}
var IsCanWrite = Attribute.GetCustomAttribute(item, typeof(CanWriteAttribute)) as CanWriteAttribute;
//实体包含CanWriteAttribute特性 则跳出
if (IsCanWrite != null && !IsCanWrite.CanWrite)
{
continue;
}
if (item.PropertyType == typeof(bool))
{
continue;
}
//属性不可写
if (!item.CanWrite)
{
continue;
}
//该属性是否可读
if (item.CanRead)
{
object objValue = item.GetValue(Models, item.GetIndexParameters());
//Key Value加入SqlParameter
List.Add(new System.Data.SqlClient.SqlParameter(item.Name, objValue));
}
}
return List.ToArray();
}