这个仅是为了培训做的一个小例子

public class DB     {

public static string GetClassName(Type type)

{

if (type == null)

throw new ArgumentException("参数type不能为空");

else{

if (type.HasAttribute<DBTableNameAttribute>())

return type.GetAttribute<DBTableNameAttribute>().Name;

else

return type.Name;

  }

}

public static T AddObject<T>(T o) where T :class

{

string tablename = GetClassName(typeof(T));

string fieldName;

object fieldValue;

string[] fieldNames;

object[] fieldValues;

System.Reflection.PropertyInfo[] Props = typeof(T).GetProperties();

fieldNames=new string[Props.Length ];

fieldValues =new object [Props.Length ];

string checkstr = "";

for (int i = 0; i < Props.Length; i++)

{

fieldName = Props[i].Name;

fieldValue = Props[i].GetValue(o, null);

if (fieldValue == null)                     continue;

fieldValue = CommonFunction.SafeSQL(fieldValue.ToString());

fieldNames[i] = fieldName;

fieldValues[i] = fieldValue;

object[] attributes = Props[i].GetCustomAttributes(false);

foreach (Attribute a in attributes)

{

//判断Attribute 中是否 为 UniqueColumnAttribute

if (a is UniqueColumnAttribute)

{

checkstr = "not exists(select * from " +tablename + " where " + fieldName  + "='" + fieldValue + "')";

}

}

}

if (checkstr != "")

{

checkstr = "if("+checkstr +")";

}

string insert = "" ,tail="";

insert = "insert into " + tablename + " (";

tail = "values(";

for (int i = 0; i < Props.Length; i++)

{

fieldName = fieldNames[i] ;

if (fieldName.ToUpper() == "ID") continue;

object  _fieldValue = fieldValues[i];

if (_fieldValue == null)

{ }

else

      {

insert += fieldName + ",";

tail += "'" + _fieldValue + "',";

}

}

insert = insert.Remove(insert.Length - 1);

tail = tail.Remove(tail.Length - 1);

string insertstr = insert + ")" + " " + tail + ")";

if (checkstr != "")

insertstr = checkstr +"begin "+ insertstr+" end";

insertstr+=" select @@identity"

SqlHelper link = new SqlHelper();

int r=  link.UpdateDataBase(insertstr);

if(r>0)     {

o.Id=r;

return o;

}

return null;

}

public static bool  DelObject<T>( int id) where T : class

{

if (id == 0) return false;

string tablename = GetClassName(typeof(T));

string insert = "";

insert =string.Format( "delete from {0} where id={1}",tablename,id)

SqlHelper link = new SqlHelper();

int r = link.UpdateDataBase(insert);

return true;

}

public static bool  DelObject<T>(T o) where T : class

{

string tablename = GetClassName(typeof(T));

string fieldName;

object fieldValue;

string[] fieldNames;

object[] fieldValues;

System.Reflection.PropertyInfo[] Props = typeof(T).GetProperties();

fieldNames = new string[Props.Length];

fieldValues = new object[Props.Length];

for (int i = 0; i < Props.Length; i++)

{

fieldName = Props[i].Name;

fieldValue = Props[i].GetValue(o, null);

fieldNames[i] = fieldName;

fieldValues[i] = fieldValue;

}

string str="";

for (int i = 0; i < Props.Length; i++)

{

fieldName = fieldNames[i];

string _fieldValue = fieldValues[i].ToString();

if (fieldName.ToUpper() == "ID")

{

str = "delete from " + tablename + " where id=" + _fieldValue ;

break;

}

}

if(!string.IsNullOrEmpty(str))

{

SqlHelper link = new SqlHelper();

int r = link.UpdateDataBase(str);

return true;

}

return false;

}

public static bool UpdateObject<T>(T o) where T : class

{

string tablename = GetClassName(typeof(T));

string fieldName;

object fieldValue;

string[] fieldNames;

object[] fieldValues;

System.Reflection.PropertyInfo[] Props = typeof(T).GetProperties();

fieldNames = new string[Props.Length];

fieldValues = new object[Props.Length];

for (int i = 0; i < Props.Length; i++)

{

if (Props[i].DeclaringType.IsValueType)

{

fieldName = Props[i].Name;

fieldValue = Props[i].GetValue(o, null);

fieldNames[i] = fieldName;

fieldValues[i] = fieldValue;

}

else

{

fieldNames[i] = null;

fieldValues[i] = null;

}

}

string str = "update "+tablename +" set ",where=" where id=";

int id = 0;

for (int i = 0; i < Props.Length; i++)

{

fieldName = fieldNames[i];

object  _fieldValue = fieldValues[i] ;

if (fieldName == null) continue;

if (fieldName.ToUpper() == "ID")

{

if (_fieldValue == null)

{

}

else

{

int.TryParse(_fieldValue.ToString(), out id);

//str = "delete from " + tablename + " where id=" + _fieldValue;

where += id.ToString();

}

//break;

}

else

{

if (_fieldValue == null)

{

}

else

str += fieldName +  "='" + _fieldValue.ToString() + "',";

}

}

if (id <= 0) return false;

str = str.Remove(str.Length - 1);

str += where;

SqlHelper link = new SqlHelper();

int r = link.UpdateDataBase(str);

return true;

}

public static T SelObject<T>(int id) where T : class

{

if (id <= 0) return null ;

string tablename = GetClassName(typeof(T));

string insert = "";

insert = "select * from " + tablename + " where id=" + id.ToString();

SqlHelper link = new SqlHelper();

DataTable dt = link.SelectDataBase(insert);

if (dt == null || dt.Rows.Count == 0) return null;

Type type = typeof(T);

Object obj = type.Assembly.CreateInstance(type.FullName);

System.Reflection.PropertyInfo[] Props = typeof(T).GetProperties();

for (int i = 0; i < Props.Length; i++)

{

Props[i].SetValue(obj, dt.Rows[0][Props[i].Name], null);

}

return (T)obj;

}

public static T SelObject<T>(BaseQuery query  ) where T : class

{

if (query==null )

return null;

string tablename = GetClassName(typeof(T));

if (tablename.EndsWith("Query"))

tablename = tablename.Replace("Query","");

string fieldName;

object fieldValue;

string[] fieldNames;

object[] fieldValues;

System.Reflection.PropertyInfo[] Props = query.GetType().GetProperties();

fieldNames = new string[Props.Length];

fieldValues = new object[Props.Length];

for (int i = 0; i < Props.Length; i++)

{

fieldName = Props[i].Name;

fieldValue = Props[i].GetValue(query, null);

fieldNames[i] = fieldName;

fieldValues[i] = fieldValue;

}

string insert = "",where="1=1";

insert = "select * from " + tablename + " where "  ;

int id = 0;

for (int i = 0; i < Props.Length; i++)

{

fieldName = fieldNames[i];

object _fieldValue = fieldValues[i];

if (fieldName.ToUpper() == "ID")

{

if (_fieldValue == null)

{ }

else

{

int.TryParse(_fieldValue.ToString(), out id);

//str = "delete from " + tablename + " where id=" + _fieldValue;

where +="Id="+ id.ToString();

}

//break;

}

else

{

if (_fieldValue == null)

{ }

else

{

if (string.IsNullOrEmpty(_fieldValue.ToString()))

{ }

else

where += " and " + fieldName + "='" + _fieldValue.ToString() + "'";

}

}

}

insert = insert + where;

SqlHelper link = new SqlHelper();

DataTable dt = link.SelectDataBase(insert);

if (dt == null || dt.Rows.Count == 0) return null;

Type type = typeof(T);

Object obj = type.Assembly.CreateInstance(type.FullName );

System.Reflection.PropertyInfo[] Props2 = typeof(T).GetProperties();

for (int i = 0; i < Props2.Length; i++)

{

Props2[i].SetValue(obj, dt.Rows[0][Props2[i].Name], null);

}

return (T)obj;

}

public static T SelObject<T>(string where) where T : class

{

if (string.IsNullOrEmpty(where)) )                 return null;

string tablename = GetClassName(typeof(T));

string insert = "";

insert = "select * from " + tablename + " where " + where;

SqlHelper link = new SqlHelper();

DataTable dt = link.SelectDataBase(insert);

if (dt == null || dt.Rows.Count == 0) return null;

Type type = typeof(T);

Object obj = type.Assembly.CreateInstance(type.FullName);

System.Reflection.PropertyInfo[] Props = typeof(T).GetProperties();

for (int i = 0; i < Props.Length; i++)

{

Props[i].SetValue(obj, dt.Rows[0][Props[i].Name], null);

}

return (T)obj;

}

public static List<T> ListObjects<T>(string where) where T : class

{

try

{

if (string.IsNullOrEmpty(where))

where = "1=1";

string tablename = GetClassName(typeof(T));

string insert = "";

insert = "select * from " + tablename + " where " + where;

SqlHelper link = new SqlHelper();

DataTable dt = link.SelectDataBase(insert);

if (dt == null || dt.Rows.Count == 0) return null;

Type type = typeof(T);

List<T> list = new List<T>();

for (int row = 0; row < dt.Rows.Count; row++)

{

Object obj = type.Assembly.CreateInstance(type.FullName );

System.Reflection.PropertyInfo[] Props = typeof(T).GetProperties();

for (int i = 0; i < Props.Length; i++)

{

Props[i].SetValue(obj, dt.Rows[row][Props[i].Name], null);

}

list.Add((T)obj);

}

return list;

}

catch

{

return null;

}

}

}

原创最简单的ORM例子的更多相关文章

  1. D2010 RTTI + Attribute 简单实现ORM

    还记得David I 今年四月来盛大时,被问及“反射机制能再做得好一点吗?我们想放弃RTTI”,David I 回答“这的确是需要考虑的地方,当然RTTI我们不会放弃的”.(这个白胡子的老哥哥还真很可 ...

  2. 使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51007512 ...

  3. 使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51006463 ...

  4. 一个简单的CORBA例子

    因为对CORBA分析的需要,这里写一个简单的CORBA例子.从JDK1.2开始,JDK中集成了ORB的实现,本例子使用了JDK1.7,对于JDK1.2+应该都没有问题.这个例子实现一个简单的加减乘除的 ...

  5. 菜鸟学习Hibernate——简单的一个例子

    一.Hibernate开发. 上篇博客已经为大家介绍了持久层框架的发展流程,持久层框架的种类. 为了能够使用Hibernate快速上手,我们先讲解一个简单的Hibernate应用实例hibernate ...

  6. 一个简单的ORM制作(SQL帮助类)

    一个简单的ORM制作大概需要以下几个类: SQL执行类 CURD操作类 其他酱油类 先从SQL执行类说起,可能会涉及数据库的迁移等问题,所以需要定义一个接口以方便迁移到其他数据库, 事务没提供命名,若 ...

  7. 轻松创建nodejs服务器(1):一个简单nodejs服务器例子

    这篇文章主要介绍了一个简单nodejs服务器例子,本文实现了一个简单的hello world例子,并展示如何运行这个服务器,需要的朋友可以参考下   我们先来实现一个简单的例子,hello world ...

  8. C#基础笔记---浅谈XML读取以及简单的ORM实现

    背景: 在开发ASP.NETMVC4 项目中,虽然web.config配置满足了大部分需求,不过对于某些特定业务,我们有时候需要添加新的配置文件来记录配置信息,那么XML文件配置无疑是我们选择的一个方 ...

  9. 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)

    使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Netw ...

随机推荐

  1. 软件工程(FZU2015)学生博客列表(最终版)

    FZU:福州大学软件工程 张老师的博客:http://www.cnblogs.com/easteast/ 经过前两周选课,最后正式选上课程的所有学生博客如下: 序号 学号后3位 博客 1 629 li ...

  2. cmd 下telnet 不是内部或外部命令

    问题:cmd 下telnet 提示不是内部或外部命令 解决方案:

  3. 非常实用的jquery版表单验证

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <script src ...

  4. 开发错误记录10: Butterknife8.1.0 提示NullPointerException空指针

    Butterknife 8.0以后的版本在引入到项目中有变动,按之前的引入方式之后, 会报 空指针! 正确的引入方法是:(在官方的文件上有说明的,记录是为了方便下次引入,直接复制到项目) 在项目的.g ...

  5. java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 错误

    你的ArrayList 是一个没有值的对象(不是null),也就是里面什么对象也没有存(即:arrayList.size()==0).但是,你有取它下标为0值的操作.所以,数组越界了!!比如array ...

  6. Mysql-报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost

    报错:1130-host ... is not allowed to connect to this MySql server   解决方法: 1. 改表法. 可能是你的帐号不允许从远程登陆,只能在l ...

  7. Activity的四种launchMode

    来源:http://blog.csdn.net/liuhe688/article/details/6754323/ 我们今天要讲的是Activity的四种launchMode. launchMode在 ...

  8. 绘图: Shape, Path

    Shape - 图形 Path - 路径 示例1.演示“Shape”相关知识点Drawing/Shape.xaml <Page x:Class="Windows10.Drawing.S ...

  9. Yii2的Debug工具

    yii2的Debug工具 调用   r=debug 可以对程序进行性能分析,从而对程序进行改良 (1)数据库某条sql语句的执行时间 (2)debug的profiling标签 \YII::beginP ...

  10. [bzoj3670][2014湖北省队互测week2]似乎在梦中见过的样子

    Description 已知一个字符串S,求它有多少个形如A+B+A的子串(len(A)>=k,len(B)>=1 ). Input 第一行一个字符串,第二行一个数 k. Output 仅 ...