2020-02-06 更新 修复参数值为空异常问题
namespace 根据Model生成Sql
{//转载请保留 http://www.luofenming.com/show.aspx?id=ART2018040700001
public class TestModel
{
//KeyAttribute 这个Key
//如果 TestAttribute则特性写[Test(IsIncrement = true)]
[Key(IsIncrement = true)]
public int ID { get; set; }
[Column("Name")]
public string NikeName { get; set; }
public string QQ { get; set; }
public string Email { get; set; }
}
}
namespace 根据Model生成Sql
{
public class ColumnAttribute : Attribute
{
private string _name=string.Empty;
public ColumnAttribute(string name)
{
this._name = name;
}
public string GetName()
{
return _name;
}
}
}
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Reflection;
using System.Text;
namespace 根据Model生成Sql
{
public class TestDal
{
//特性创建Sql语句,处理Model字段与数据库列不同
public void CreateSql3<T>(T model)
{
Type type = typeof(T);
PropertyInfo[] propertyArray = type.GetProperties().ToArray();
string[] strSqlNames = propertyArray.Select(p => $"[{GetName(p)}]").ToArray();
string strSqlName = string.Join(",", strSqlNames);
string[] strSqlValues = propertyArray.Select(p => $"@{GetName(p)}").ToArray();
string strSqlValue = string.Join(",", strSqlValues);
//strSql是创建的Sql语句
string strSql = "insert into testModel ( " + strSqlName + " ) values (" + strSqlValue + ")";
//para Sql是参数
SqlParameter[] para = propertyArray.Select(p => new SqlParameter($"@{p.Name}", p.GetValue(model, null)??DBNull.Value)).ToArray();
}
private string GetName(PropertyInfo name)
{
if (name.IsDefined(typeof(ColumnAttribute), true))
{
ColumnAttribute attribute = (ColumnAttribute)name.GetCustomAttributes(typeof(ColumnAttribute), true)[0];
return attribute.GetName();
}
return name.Name;
}
}
}
//以下是方法调用
private void button1_Click(object sender, EventArgs e)
{
TestDal dal = new TestDal();
TestModel model = new TestModel()
{
ID = 10001,
NikeName = "罗分明",
QQ = "78630559",
Email = "78630559@qq.com"
};
dal.CreateSql3(model);
}