在执行数据库Insert操作时,我们一般会使用2种方式来操作数据库;
1、手动编写SQL的Insert语句来插入数据库,这种方式可以更加灵活的创建语句,但是操作比较繁琐,如果数据过大可能或导致细节输入错误,导致数据库insert语句执行失败;
2、使用实体类的方式来执行,但是也得先将数据赋值给实体类才能进行数据库操作且实体类将要与数据库保持一样,负责会造成数据库语句执行失败的情况;
下面就是我的思路,自动将实体类的数据转为SQL语句且按照名称的方式来选择性插入数据;
public string GetInsertSql(T models)
{
//已实例化的实体用GetType,如果未实例化的我们需要使用typeof
Type type = models.GetType();//new 过的对象
//获取所有的字段
PropertyInfo[] info = type.GetProperties();
//这里是字段
string field = "";
//获取值
string value = "";
//遍历所有的字段对象
for (int i = 0; i < info.Length; i++)
{
//info[i].GetValue(models)获取某个字段的属性值
//有可能字段没有值,没有值的我们不添加
//info[i]是一个抽象类,存储着第几个字段的名称及类型等
if (info[i].GetValue(models) != null)
{
//if (!info[i].Name.Contains("Id"))
//获取字段和值
if ((i + 1) == info.Length)//代表最后一个循环不要,
{
//info[i].Name代表某个字段的名称
field += info[i].Name;
//因为GetValue的参数是object所以不需要用类型判断
string name = info[i].GetValue(models).ToString();
value += "'" + info[i].GetValue(models).ToString() + "'";
}
else
{
field += info[i].Name + ",";
value += "'" + info[i].GetValue(models).ToString() + "',";
}
}
}
//生成了sql语句
string sql = "insert into " + type.Name + "(" + field + ") values(" + value + ")";
return sql;
}