您的位置:首页 > 数据库

使用反射自动添加sql参数

2016-10-25 17:47 337 查看
1.在三层中的model下新建类TestModel.cs文件其中代码如下
private string _DIVISION_NAME_CHI;
/// <summary>
/// 处
/// </summary>
[Column(Name = "DIVISION_NAME_CHI")]
public string DIVISION_NAME_CHI
{
get { return _DIVISION_NAME_CHI; }
set { _DIVISION_NAME_CHI = value; }
}

private string _BU_NAME_CHI;
/// <summary>
/// 部门
/// </summary>
[Column(Name = "BU_NAME_CHI")]
public string BU_NAME_CHI
{
get { return _BU_NAME_CHI; }
set { _BU_NAME_CHI = value; }
}

private string _EMPLOYEEID;
/// <summary>
/// 工号
/// </summary>
[Column(Name = "EMPLOYEEID")]
public string EMPLOYEEID
{
get { return _EMPLOYEEID; }
set { _EMPLOYEEID = value; }
}
2.在model文件夹下新建类ColumnAttribute.cs文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Model
{
public class ColumnAttribute : Attribute
{
private string _Name;

public string Name
{
get { return _Name; }
set { _Name = value; }
}
}
}

3.在DAL文件夹下新建类TestDAL.cs文件添加该方法
#region 构造sql参数集
/// <summary>
/// 构造sql参数集
/// </summary>
/// <param name="myDishInfo">测试model</param>
/// <returns></returns>
public static List<SqlParameter> GetSqlParametersList(ref TestModel myBJTableInfo)
{
Type type = myBJTableInfo.GetType();
PropertyInfo[] propertyInfos = type.GetProperties();
List<SqlParameter> sqlparameterList = new List<SqlParameter>();
if (propertyInfos != null && propertyInfos.Length > 0)
{
foreach (PropertyInfo info in propertyInfos)
{
object[] columns = info.GetCustomAttributes(typeof(ColumnAttribute), true);
if (columns != null && columns.Length > 0)
{

ColumnAttribute ca = columns[0] as ColumnAttribute;
string name = "@" + ca.Name;
SqlParameter para = new SqlParameter(name, info.GetValue(myBJTableInfo, null));
sqlparameterList.Add(para);
}
}
}
return sqlparameterList;
}
#endregion
4.在TestDAL.cs引入命名空间using System.Reflection;5.在需要添加sql参数的地方进行如下调用,就可将model中的参数和值加载进去了
	    List<SqlParameter> ilistStr = new List<SqlParameter>();            ilistStr = GetSqlParametersList(ref model);	   SqlParameter[] paras = ilistStr.ToArray();6.缺点是无论是只需要其中的一个参数还是几个参数都会全部加载进去
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: