using System;
using System.Data;
using System.Data.Common;
using System.Data.OracleClient;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using System.Text;
namespace Attributes
{
public static class DataOperate<T>
{
private static readonly string SQL_INSERT = "INSERT INTO {0}({1}) VALUES ({2})";
private static readonly string SQL_DELETE = "DELETE FROM {0} WHERE {1}";
private static readonly string SQL_UPDATE = "UPDATE {0} SET {1} where {2}";
private static readonly string SQL_SELECT = "SELECT * FROM {0} where {1}";
/// <summary>
/// 插入数据
/// </summary>
/// <param name="entity"></param>
/// <param name="primaryKey">主键不作为数据插入项</param>
/// <returns></returns>
public static int Insert(T entity)
{
string tableName = string.Empty;
StringBuilder fieldName = new StringBuilder();
StringBuilder value = new StringBuilder();
Type type = entity.GetType();
tableName = type.Name.Replace("Object", "");
PropertyInfo[] propertyArray = type.GetProperties();
OracleParameter[] SqlPar = new OracleParameter[propertyArray.Length];
int index = 0;
foreach (PropertyInfo property in propertyArray)
{
string columnName = string.Empty;
object obj = property.GetValue(entity, null);
if (obj != null)
{
columnName = property.Name;
fieldName.AppendFormat("{0},", columnName);
value.AppendFormat(":{0},", columnName);
SqlPar[index++] = GetParamter.GetOracleParamter(":" + property.Name, property, obj.ToString() );
}
}
string sql = string.Format(SQL_INSERT, tableName, fieldName.ToString().Trim(','), value.ToString().Trim(','));
return DbHelperOra.ExecuteSql(sql, SqlPar);
}
/// <summary>
/// 按主键删除
/// </summary>
/// <param name="entity"></param>
/// <param name="prmaryKey">按主键删除</param>
/// <returns></returns>
public static int Delete(T entity, string primaryKey)
{
string tableName = string.Empty;
string fieldName = string.Empty;
Type type = entity.GetType();
tableName = type.Name.Replace("Object", "");
PropertyInfo[] propertyArray = type.GetProperties();
foreach (PropertyInfo property in propertyArray)
{
if (property.Name.ToLower() == primaryKey.ToLower())
{
object obj = property.GetValue(entity, null);
fieldName = obj.ToString();
break;
}
}
string sql = string.Format(SQL_DELETE, tableName, primaryKey + "=" + fieldName);
return DbHelperOra.ExecuteSql(sql);
}
/// <summary>
/// 根据条件更新
/// </summary>
/// <param name="entity"></param>
/// <param name="primaryKey"></param>
/// <returns></returns>
public static int Update(T entity, string field)
{
string tableName = string.Empty;
StringBuilder fieldName = new StringBuilder();
Type type = entity.GetType();
tableName = type.Name.Replace("Object", "");
PropertyInfo[] propertyArray = type.GetProperties();
OracleParameter[] SqlPar = new OracleParameter[propertyArray.Length];
int index = 0;
foreach (PropertyInfo property in propertyArray)
{
string columnName = string.Empty;
object obj = property.GetValue(entity, null);
if (obj != null)
{
columnName = property.Name;
if (columnName == field)
{
field = columnName + "='" + obj.ToString() + "'";
continue;
}
else
{
fieldName.AppendFormat("{0}=:{0},", columnName);
SqlPar[index++] = GetParamter.GetOracleParamter(":" + property.Name, property,obj.ToString());
}
}
}
string sql = string.Format(SQL_UPDATE, tableName,
fieldName.ToString().Substring(0, fieldName.Length - 1), field);
return DbHelperOra.ExecuteSql(sql, SqlPar);
}
/// <summary>
/// 根据条件查询,返回DataSet
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public static DataSet Select(T entity)
{
string tableName = string.Empty;
List<string> condition = new List<string>();
Type type = entity.GetType();
tableName = type.Name.Replace("Object", "");
PropertyInfo[] propertyArray = type.GetProperties();
foreach (PropertyInfo property in propertyArray)
{
object obj = property.GetValue(entity, null);
if (obj != null)
{
condition.Add(string.Format("{0}='{1}'", property.Name, obj));
}
}
string strCondition = string.Empty;
if (condition.Count == 0)
strCondition = "1=1";
else if (condition.Count == 1)
strCondition = condition[0];
else
{
for (int i = 0; i < condition.Count - 1; i++)
strCondition += string.Format("{0} and ", condition[i]);
strCondition += condition[condition.Count - 1];
}
string sql = string.Format(SQL_SELECT, tableName, strCondition);
return DbHelperOra.ExecuteDataSet(sql);
}
/// <summary>
/// 根据条件查询,返回SqlDataReader
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public static OracleDataReader SelectReader(T entity)
{
string tableName = string.Empty;
List<string> condition = new List<string>();
Type type = entity.GetType();
tableName = type.Name.Replace("Object", "");
PropertyInfo[] propertyArray = type.GetProperties();
foreach (PropertyInfo property in propertyArray)
{
object obj = property.GetValue(entity, null);
if (obj != null)
{
condition.Add(string.Format("{0}='{1}'", property.Name, obj));
}
}
string strCondition = string.Empty;
if (condition.Count == 0)
strCondition = "1=1";
else if (condition.Count == 1)
strCondition = condition[0];
else
{
for (int i = 0; i < condition.Count - 1; i++)
strCondition += string.Format("{0} and ", condition[i]);
strCondition += condition[condition.Count - 1];
}
string sql = string.Format(SQL_SELECT, tableName, strCondition);
return DbHelperOra.ExecuteReader(sql);
}
}
}