c#一步一步实现ORM(二)
c#一步一步实现ORM(二)
上一篇描述了简单的思路,这一片我们来稍微细化一下
1插入的时候忽略某些字段
public int Insert<T>(T o, params string[] except)
{
//有时候我们添加的时候只想添加部分字段,或者有的字段是自增的方式,那么要去掉这个字段(在sqlserver里面是这样,在mysql里面 是插入 null)
try
{
Type type = typeof(T);
var tablename = "dbo.[" + typeof(T).Name + "]";
string fields = "";
string values = "";
List<SqlParameter> paras = new List<SqlParameter>();
object v = null;
foreach (var item in type.GetProperties())
{
bool flag = true;
if (except != null && except.Contains(item.Name))
{
flag = false;
}
if (flag)
{
v = item.GetValue(o, null);
if (v != null)
{
fields += "," + "[" + item.Name + "]";
values += ",@" + item.Name;
paras.Add(new SqlParameter("@" + item.Name, v));
}
}
}
string sql = string.Format("insert into {0} ({1}) values({2})", tablename, fields.Substring(1), values.Substring(1));
return ExcuteSql(sql, paras);
}
catch (Exception e)
{
Console.Write(e.ToString());
return 0;
}
}
2批量插入
public int InsertArray<T>(IEnumerable<object> o, params string[] except)
{
if (o.Count() == 0)
{
return 0;
}
Type type = typeof(T);
var tablename = "dbo.[" + typeof(T).Name + "]";
List<SqlParameter> paras = new List<SqlParameter>();
string sql = "";
int count = 0;
foreach (var i in o)
{
count++;
string fields = "";
string values = "";
//object v = null;
foreach (var item in type.GetProperties())
{
bool flag = false;
if (!flag)
{
var vitem = item.GetValue(i, null);
if (vitem != null)
{
fields += ",[" + item.Name + "]";
values += ",@" + count + item.Name;
paras.Add(new SqlParameter("@" + count + item.Name, vitem));
}
}
}
sql += string.Format("insert into {0} ({1}) values({2});", tablename, fields.Substring(1), values.Substring(1));
}
return ExcuteSql(sql, paras);
}
private int ExcuteSql(string sql, IEnumerable<SqlParameter> paras)
{
using (SqlConnection conn = new SqlConnection(this.sqlConnStr))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.Parameters.AddRange(paras.ToArray());
conn.Open();
int flag = 0;
try
{
flag = cmd.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
conn.Close();
return flag;
}
}
下一篇我们开始学习修改,删除,和解析lambda表达式

浙公网安备 33010602011771号