刚写的SQLHelper,已经验证。使用这个帮助类有个条件,那就是实体类的公开属性必须和数据库的字段对应(忽略大小写),
否则通过实体类反射数据库的字段将会对应不上,结果你懂的
using System;
using System.Data;
using System.Xml;
using System.Data.SqlClient;
using System.Collections;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Reflection;
using System.Configuration;
using System.Text;
namespace DAL
{
public class SQLHelper
{
/// <summary>
/// 数据库连接字符串
/// </summary>
public static string sConn
{
get
{
return ConfigurationManager.ConnectionStrings["ahap"].ConnectionString;
}
}
/// <summary>
/// 查询
/// </summary>
/// <param name="queryColumn">查询的字段</param>
/// <param name="tableName">查询的表名</param>
/// <param name="dataTableName">返回的DataTable名称</param>
/// <param name="strwhere">条件</param>
/// <param name="orderBy">排序</param>
/// <returns>DataTable</returns>
public static DataTable Query(string queryColumn, string tableName, string dataTableName, string strwhere, string orderBy)
{
string sql = string.Format("select {0} from {1} where 1=1 {2} {3}", queryColumn, tableName, strwhere, orderBy);
DataTable table = new DataTable(dataTableName);
try
{
using (SqlConnection con = new SqlConnection(sConn))
{
SqlDataAdapter adapter = new SqlDataAdapter(sql, con);
adapter.Fill(table);
return table;
}
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// 添加(通过反射)
/// </summary>
/// <param name="obj">要存入的对象</param>
/// <param name="tableName">对应的表名</param>
/// <param name="primaryKey">对应表主键(主键默认自增,不让插入数据)</param>
/// <returns>是否成功</returns>
public static bool Add(object obj, string tableName, string primaryKey)
{
Type t = obj.GetType();
//返回共有属性
PropertyInfo[] pi = t.GetProperties();
StringBuilder sql = new StringBuilder();
sql.AppendFormat("insert into {0} ( ", tableName);
for (int i = 0; i < pi.Length; i++)
{
//主键不插入数据
if (pi[i].Name == primaryKey)
continue;
sql.Append(pi[i].Name + ",");
}
//移除最后的逗号
sql.Remove(sql.Length - 1, 1);
sql.Append(") values(");
int j = 0;
//参数长度等于共有属性的个数减去主键个数
SqlParameter[] paras = new SqlParameter[pi.Length - 1];
for (int i = 0; i < pi.Length; i++)
{
//主键不插入数据
if (pi[i].Name == primaryKey)
continue;
sql.Append("@" + pi[i].Name + ",");
//为参数化赋值
object value = ConvertToDBNull(t.GetProperty(pi[i].Name).GetValue(obj, null));
paras[j] = new SqlParameter("@" + pi[i].Name, value);
j++;
}
//移除最后的逗号
sql.Remove(sql.Length - 1, 1);
sql.Append(" )");
SqlConnection con = null;
try
{
using (con = new SqlConnection(sConn))
{
SqlCommand com = new SqlCommand(sql.ToString(), con);
com.Parameters.AddRange(paras);
con.Open();
com.ExecuteNonQuery();
return true;
}
}
catch (Exception ex)
{
return false;
}
}
/// <summary>
/// 更新(通过反射)
/// </summary>
/// <param name="obj">要存入的对象</param>
/// <param name="tableName">对应的表名</param>
/// <param name="strwhere">更新条件</param>
///<param name="primaryKey">对应表主键(主键默认自增,不更新)</param>
/// <returns>是否成功</returns>
public static bool Update(object obj, string tableName, string strwhere, string primaryKey)
{
Type t = obj.GetType();
PropertyInfo[] pi = t.GetProperties();
StringBuilder sql = new StringBuilder();
sql.AppendFormat("update {0} set ", tableName);
int j = 0;
SqlParameter[] paras = new SqlParameter[pi.Length - 1];
for (int i = 0; i < pi.Length; i++)
{
//主键不更新
if (pi[i].Name == primaryKey)
continue;
sql.Append(pi[i].Name + " = @" + pi[i].Name + ",");
//为参数化赋值
object value = ConvertToDBNull(t.GetProperty(pi[i].Name).GetValue(obj, null));
paras[j] = new SqlParameter("@" + pi[i].Name, value);
j++;
}
//移除最后的逗号
sql.Remove(sql.Length - 1, 1);
sql.Append(" where 1=1 " + strwhere);
SqlConnection con = null;
try
{
using (con = new SqlConnection(sConn))
{
SqlCommand com = new SqlCommand(sql.ToString(), con);
com.Parameters.AddRange(paras);
con.Open();
com.ExecuteNonQuery();
return true;
}
}
catch (Exception ex)
{
return false;
}
}
/// <summary>
/// 删除
/// </summary>
/// <param name="tableName">对应表名</param>
/// <param name="strwhere">条件</param>
/// <returns>是否成功</returns>
public static bool Delete(string tableName, string strwhere)
{
string sql = "delete " + tableName + " where 1=1 " + strwhere;
SqlConnection con = null;
try
{
using (con = new SqlConnection(sConn))
{
SqlCommand com = new SqlCommand(sql, con);
con.Open();
com.ExecuteNonQuery();
return true;
}
}
catch (Exception ex)
{
return false;
}
}
/// <summary>
/// 分页
/// </summary>
/// <param name="queryColumn">查询字段</param>
/// <param name="tableName">查询表名</param>
/// <param name="strwhere">条件</param>
/// <param name="orderBy">排序</param>
/// <param name="dataTableName">返回的DataTable名</param>
/// <param name="pageSize">第几页</param>
/// <param name="pageIndex">每页几条数据</param>
/// <param name="primaryKey">该表主键</param>
/// <returns>DataTable</returns>
public static DataTable Paging(string queryColumn, string tableName, string strwhere, string orderBy, string dataTableName, int pageSize, int pageIndex, string primaryKey)
{
string sql = string.Format(@"
select top({0}) {1} from {2} where 1=1 and {3} not in (select top({4}) {5}
from {6} where 1=1 {7} {8}) {9} {10} ",
pageIndex, queryColumn, tableName, primaryKey, (pageSize - 1) * pageIndex, primaryKey,
tableName, strwhere, orderBy, strwhere, orderBy);
DataTable table = new DataTable(dataTableName);
try
{
using (SqlConnection con = new SqlConnection(sConn))
{
SqlDataAdapter adapter = new SqlDataAdapter(sql, con);
adapter.Fill(table);
return table;
}
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// DataSetToList
/// </summary>
/// <typeparam name="T">转换类型</typeparam>
/// <param name="dataSet">数据源</param>
/// <param name="tableIndex">需要转换表的索引</param>
/// /// <returns>泛型集合</returns>
public static IList<T> DataSetToList<T>(DataSet dataset, int tableIndex)
{
//确认参数有效
if (dataset == null || dataset.Tables.Count <= 0 || tableIndex < 0)
{
return null;
}
DataTable dt = dataset.Tables[tableIndex];
IList<T> list = new List<T>();
for (int i = 0; i < dt.Rows.Count; i++)
{
//创建泛型对象
T _t = Activator.CreateInstance<T>();
//获取对象所有属性
PropertyInfo[] propertyInfo = _t.GetType().GetProperties();
//属性和名称相同时则赋值
for (int j = 0; j < dt.Columns.Count; j++)
{
foreach (PropertyInfo info in propertyInfo)
{
if (dt.Columns[j].ColumnName.ToUpper().Equals(info.Name.ToUpper()))
{
if (dt.Rows[i][j] != DBNull.Value)
{
info.SetValue(_t, dt.Rows[i][j], null);
}
else
{
info.SetValue(_t, null, null);
}
break;
}
}
}
list.Add(_t);
}
return list;
}
/// <summary>
/// 参数化类型不能插入空值,如果为null必须转换成DBNull
/// </summary>
public static object ConvertToDBNull(object str)
{
if (str == null)
{
return DBNull.Value;
}
else
{
return str;
}
}
}
}
浙公网安备 33010602011771号