using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Dynamic; using System.Linq; namespace Common.Helper.SqlServer { public class SqlHelper { public static readonly string ConnectString = ""; private SqlConnection _con; private SqlCommand _cmd; private SqlDataAdapter _sda; private SqlDataReader _sdr; private DataSet _ds; private DataView _dv; public static SqlConnection GetConnection()//定义成静态的,很重要! { return new SqlConnection(ConnectString); } /// /// 打开数据库连接 /// public void OpenDataBase() { _con = new SqlConnection(ConnectString); _con.Open(); } /// /// 关闭数据库连接 /// public void CloseDataBase() { _con.Close(); _con.Dispose(); } /// /// 返回DataSet数据集 /// /// 数据库查询字符串 /// /// DataSet public DataSet GetDs(string sqlStr, string tableName) { OpenDataBase(); _sda = new SqlDataAdapter(sqlStr, _con); _ds = new DataSet(); _sda.Fill(_ds, tableName); CloseDataBase(); return _ds; } public DataView GetDv(string sqlStr) { OpenDataBase(); _sda = new SqlDataAdapter(sqlStr, _con); _ds = new DataSet(); _sda.Fill(_ds); _dv = _ds.Tables[0].DefaultView; CloseDataBase(); return _dv; } /// /// 返回DataReader对象 /// /// 查询字符串 /// 返回值 public SqlDataReader GetDataReader(string sqlString) { OpenDataBase(); _cmd = new SqlCommand(sqlString, _con); _sdr = _cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); return _sdr; } public DataSet DataSet(string sql) { SqlConnection con = new SqlConnection(ConnectString); SqlCommand cmd = new SqlCommand(sql, con); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = null; try { con.Open(); ds = new DataSet(); da.Fill(ds); } catch (SqlException ex) { throw ex; } catch (Exception ex) { throw ex; } finally { con.Close(); } return ds; } public static DataTable DataTable(string sql) { var con = new SqlConnection(ConnectString); var cmd = new SqlCommand(sql, con); var da = new SqlDataAdapter(cmd); DataTable ds = null; try { con.Open(); ds = new DataTable(); da.Fill(ds); } catch (SqlException ex) { throw ex; } catch (Exception ex) { throw ex; } finally { con.Close(); } return ds; } public static DataTable DataTable(string sql,string connectString) { var con = new SqlConnection(connectString); var cmd = new SqlCommand(sql, con); var da = new SqlDataAdapter(cmd); DataTable ds = null; try { con.Open(); ds = new DataTable(); da.Fill(ds); } catch (SqlException ex) { throw ex; } catch (Exception ex) { throw ex; } finally { con.Close(); } return ds; } /// /// 可以传入连接字符串 返回T类型对象 /// /// /// /// /// public static List Entity(string sql,string connectString) { return ConvertDataTableToEntity(DataTable(sql,connectString)); } /// /// 根据sql语句返回 T 类型对象 /// /// /// /// public static List Entity(string sql) { return ConvertDataTableToEntity(DataTable(sql)); } /// /// 根据sql语句直接返回泛型对象 /// /// /// public static List Entity(string sql) { return ConvertDataTableToEntity(DataTable(sql)); } /// /// 执行Sql语句方法没有返回值 /// /// 传入的查询参数 public void RunSql(string sqlStr) { OpenDataBase(); _cmd = new SqlCommand(sqlStr, _con); _cmd.ExecuteNonQuery(); CloseDataBase(); } /// /// 返回查询结果的首行首列 /// /// 查询字符串 /// 返回结果 public string ReturnSql(string sqlStr) { OpenDataBase(); string returnSql; try { _cmd = new SqlCommand(sqlStr, _con); returnSql = _cmd.ExecuteScalar().ToString(); } catch(Exception ex) { throw ex; } CloseDataBase(); return returnSql; } /// /// 将DataTable转成 T 实体对象 /// /// /// /// public static List ConvertDataTableToEntity(DataTable dt) { return (from DataRow row in dt.Rows select GetItem(row)).ToList(); } /// /// 组装实体的方法 /// /// /// /// private static T GetItem(DataRow dr) { var temp = typeof(T); var obj = Activator.CreateInstance(); foreach (DataColumn column in dr.Table.Columns) { foreach (var pro in temp.GetProperties()) { if (string.Equals(pro.Name, column.ColumnName.Replace("_", string.Empty), StringComparison.CurrentCultureIgnoreCase)) { if (dr[column.ColumnName] is DBNull) { pro.SetValue(obj, default, null); continue; } pro.SetValue(obj, dr[column.ColumnName], null); if (dr[column.ColumnName] is string) pro.SetValue(obj, Convert.ToString(dr[column.ColumnName]).Trim(), null); } else continue; } } return obj; } /// /// 将DataTable转成 泛型实体对象 /// /// /// public static List ConvertDataTableToEntity(DataTable dt) { return (from DataRow row in dt.Rows select GetItem(row)).ToList(); } /// /// 不需要定义实体,直接返回泛型实体 /// /// /// public static ExpandoObject GetItem(DataRow dr) { dynamic dynamicEntity = new ExpandoObject(); foreach (DataColumn column in dr.Table.Columns) { (dynamicEntity as IDictionary).Add(column.ColumnName, (dr[column.ColumnName] is string)? dr[column.ColumnName].ToString().Trim(): dr[column.ColumnName]); } return dynamicEntity; } } }