一个简单的根据实体类自动生成SQL插入语句的例子:
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using System.Reflection;
using Lucas.Data;
namespace Lucas.ORM.MSSQLServer
{
public class MSSQLServerSqlInsertBuilder : SqlBuilder
{
#region private property
private string commandText;
private static Dictionary<Type, string> SqlDictionary = new Dictionary<Type, string>();
private QueryParameterCollection parameters;
#endregion
#region 构造函数
public MSSQLServerSqlInsertBuilder(object entity)
{
if (!SqlDictionary.ContainsKey(entity.GetType()))
{
SqlDictionary.Add(entity.GetType(), ParserCommandText(entity));
}
commandText = SqlDictionary[entity.GetType()];
parameters = new QueryParameterCollection();
ParserParameter(entity);
}
#endregion
#region property
public override string CommandText
{
get { return commandText; }
}
public override QueryParameterCollection Parameters
{
get { return parameters; }
}
#endregion
#region Method
private string ParserCommandText(object entity)
{
Type t = entity.GetType();
string tableName = t.Name;
NameValueCollection nvField = new NameValueCollection();
PropertyInfo[] properties = t.GetProperties();
StringBuilder sql = new StringBuilder("INSERT INTO ");
sql.AppendFormat("{0}", tableName);
List<string> Fields = new List<string>();
List<string> FieldParameterName = new List<string>();
foreach (PropertyInfo p in properties)
{
Fields.Add(p.Name);
FieldParameterName.Add("@"+p.Name);
}
sql.AppendFormat("({0}) ", string.Join(",",Fields.ToArray()));
sql.AppendFormat("VALUES({0})",string.Join(",",FieldParameterName.ToArray()));
return sql.ToString();
}
private void ParserParameter(object entity)
{
Type t = entity.GetType();
foreach (PropertyInfo p in t.GetProperties())
{
parameters.Add("@" + p.Name, p.GetValue(entity, null));
}
}
#endregion
}
}