namespace 根据Model生成Sql
{
public class KeyAttribute : Attribute
{
//注意KeyAttribute 前面key可以随意写但后面要为Attribute
public bool IsIncrement { get; set; }
}
}
namespace 根据Model生成Sql
{
public class TestModel
{
//KeyAttribute 这个Key
//如果 TestAttribute则特性写[Test(IsIncrement = true)]
[Key(IsIncrement = true)]
public int ID { get; set; }
public string Name { get; set; }
public string QQ { get; set; }
public string Email { get; set; }
}
}
namespace 根据Model生成Sql
{
public class TestDal
{
public void CreateSql2<T>(T model)
{
Type type = typeof(T);
PropertyInfo[] propertyArray = type.GetProperties();
foreach (PropertyInfo prop in propertyArray)
{
//判断是否标有特性
if (prop.IsDefined(typeof(KeyAttribute), true))
{
KeyAttribute attribute = (KeyAttribute)prop.GetCustomAttributes(typeof(KeyAttribute), true)[0];
//判断标的特性的bool
if (attribute.IsIncrement)
{
//where条件去掉p => !p.Name.Equals(prop.Name) 这个特性字段
//p => p.Name.Equals(prop.Name) 这样就是只要特性的字段
propertyArray = type.GetProperties().Where(p => !p.Name.Equals(prop.Name)).ToArray();
}
}
}
string[] strSqlNames = propertyArray.Select(p => $"[{p.Name}]").ToArray();
string strSqlName = string.Join(",", strSqlNames);
string[] strSqlValues = propertyArray.Select(P => $"@{P.Name}").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))).ToArray();
}
}
}
//以下是方法调用
private void button1_Click(object sender, EventArgs e)
{
TestDal dal = new TestDal();
TestModel model = new TestModel()
{
ID = 10001,
Name = "罗分明",
QQ = "78630559",
Email = "78630559@qq.com"
};
dal.CreateSql2(model);
}