使用反射實現生成新增 修改sql語句

2021-09-07 18:24:35 字數 3517 閱讀 2115

1.生成新增sql語句 

//單獨乙個model時

public static string insertsql(t t)

object value = pi.getvalue(t, null);

if (value == null)

continue; //未給值,null

value = commonfunc.uninjection(value);

if (value == null)

else if (value.gettype() == typeof(int) || value.gettype() == typeof(decimal) || value.gettype() == typeof(double) || value.gettype() == typeof(long) || value.gettype() == typeof(float))

else}}

sb.remove(sb.length - 1, 1);

sb_v.remove(sb_v.length - 1, 1);

return sb.tostring();

}//多個model時

public static string insertsql(listt)

return sb.tostring();

}

2.生成修改sql語句

//更新乙個實體

public static string updatesql(t t)

if (ca.nottablefield) //不是表字段

continue;

}#endregion

if (value == null) continue; //如果該字段為null不更新

value = commonfunc.uninjection(value);

if (value == null)

else if (value.gettype() == typeof(int) || value.gettype() == typeof(decimal) || value.gettype() == typeof(double) || value.gettype() == typeof(long) || value.gettype() == typeof(float))

else}}

if (string.isnullorempty(primaryname))

throw new exception("需要主鍵(請檢查表是否設定主鍵以及model主鍵字段是否設定特性)");

else if (parmaryvalue == null)

throw new exception("請檢查主鍵值");

else if (string.isnullorempty(sb_u.tostring()))

throw new exception("無更新");

else

return sb.tostring();

}//更新多個實體

public static string updatesql(listt)

return sb.tostring();

}

上面兩種需要用cmdb外掛程式

下面給出不需要用外掛程式的

3,插入

/// /// insert sql語句

///

/// 要轉換的物件,不可空

/// 要新增的表明,不可空

/// /// 空

/// sql語句

///

public static string insertsql(t t, string tablename) where t : class

string columns = string.join(",", t.gettype().getproperties().select(p => p.name).tolist());

if (string.isnullorempty(columns))

string values = string.join(",", t.gettype().getproperties().select(p => string.format("''", p.getvalue(t, null))).toarray());

if (string.isnullorempty(values))

stringbuilder sql = new stringbuilder();

return sql.tostring();

}/// /// insert sql語句(批量新增)

///

/// 型別

/// 要轉換的物件集合,不可空

/// >要新增的表明,不可空

/// /// 空

/// sql語句

///

public static string insertsql(listobjs, string tablename) where t : class

stringbuilder sb = new stringbuilder();

foreach (var item in objs)

return sb.tostring();

}

4,更新

/// /// update sql語句

///

/// 要轉換的物件,不可空

/// 要新增的表明,不可空

/// /// 空

/// sql語句

///

public static string updatesql(t t, string tablename) where t : class

stringbuilder sb = new stringbuilder();

propertyinfo mypropertyinfo = typeof(t).getproperties(bindingflags.public | bindingflags.instance);

for (int i = 0; i < mypropertyinfo.length; i++)

else

if (i != mypropertyinfo.length - 1)

}return sb.tostring();

}/// /// update sql語句(批量修改)

///

/// 型別

/// 要轉換的物件集合,不可空

/// >要新增的表明,不可空

/// /// 空

/// sql語句

///

public static string updatesql(listobjs, string tablename) where t : class

stringbuilder sb = new stringbuilder();

foreach (var item in objs)

return sb.tostring();

}

反射生成SQL語句入門

今天我們來學習學習通過反射技術來生成sql語句。反射提供了封裝程式集 模組和型別的物件。您可以使用反射動態地建立型別的例項,將型別繫結到現有物件,或從現有物件中獲取型別。然後,可以呼叫型別的方法或訪問其字段和屬性。1.先建立實體類 使用者實體類 public class user public st...

sql新增 刪除 修改

新增欄位的語法 alter table tablename add column datatype default value null not null 被修改的字段需為null 修改欄位的語法 alter table tablename modify column datatype defaul...

sql實現無則新增有則修改(xml)

批量新增 親測 addbatch insert into student username,password,name,code value list item stu separator 批量新增 有則修改,無則插入,親測 addbatch1 insert into student usernam...