使用反射自动添加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.缺点是无论是只需要其中的一个参数还是几个参数都会全部加载进去
/// <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.缺点是无论是只需要其中的一个参数还是几个参数都会全部加载进去
相关文章推荐
- 【PB】使用参数指定的SQL语句向指定的下拉列表框中添加数据
- Mybatis使用拦截器自动分页实现/使用反射替换sql代码分页
- 在T-SQL中使用参数将XML数据添加到SQL数据库的XML列
- 加强eclipse的使用技巧。可变参数。基本数据类型自动装箱和拆箱。枚举。反射。数组反射的应用。ArrayList和HashSet。JavaBean
- (ThreadLocal版本)Mybatis使用拦截器自动分页实现/使用反射替换sql代码分页
- 使用SQL语句重置自动编号起始值
- ibatis使用HashMap传递SQL参数
- 使用sysprep使计算机自动添加入域
- 反射中使用值类型与引用类型的参数的区别
- .net 使用带参数的SQL语句操作ACCESS 经验点滴
- 水晶报表的“SQL 表达式字段”能否使用“参数字段”?
- VS2005中数据集自动生成SQL的参数问题
- Sql 实现自动添加行数标记
- ReportView如何使用构造SQL语句带参数的存储过程创建报表以及为rdlc传递参数
- 在ADO.NET中使用参数化SQL语句的大同小异
- 在ADO.NET中使用参数化SQL语句的大同小异
- 使用SQL语句为表的字段添加描述信息
- 在存储过程里使用OleDB和Sql连接对于参数的区别
- 怎样在SQL*Plus中使用 '&' 来实现自定义参数变量?
- 使用反射检查程序集,实现自动更新