using AIMSExtension; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Diagnostics; using System.Reflection; using System.Threading; using System.Windows.Forms; namespace HelperDB { public static class DBHelper { public static string _ConnectionString = new XmlUse(Application.StartupPath + "\\AIMS.xml").GetNode("ConnectionString")[0].ToString(); /// /// 执行sql操作(增、删、改) /// /// sql语句 /// 执行的记录数 public static int ExecNonQuery(string sql) { using (SqlConnection conn = new SqlConnection(_ConnectionString)) { if (conn.State != ConnectionState.Open) conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.Parameters.Clear(); cmd.CommandText = sql; return cmd.ExecuteNonQuery(); } } } /// /// 执行sql操作(增、删、改),以参数方式传值 /// /// sql语句 /// 参数数组 /// 执行的记录数 public static int ExecNonQuery(string sql, params SqlParameter[] values) { using (SqlConnection conn = new SqlConnection(_ConnectionString)) { if (conn.State != ConnectionState.Open) conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.Parameters.Clear(); cmd.CommandText = sql; cmd.Parameters.AddRange(values); return cmd.ExecuteNonQuery(); } } } /// /// 执行sql查询,得到单个值 /// /// 得到单个值的sql查询语句 /// 单个值对象 public static object ExecuteScalar(string safeSql) { using (SqlConnection conn = new SqlConnection(_ConnectionString)) { if (conn.State != ConnectionState.Open) conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.Parameters.Clear(); cmd.CommandText = safeSql; return cmd.ExecuteScalar(); } } } /// /// 执行sql查询,得到单个值,以参数方式传值 /// /// 得到单个值的sql查询语句 /// 参数数组 /// 单个值对象 public static object ExecuteScalar(string safeSql, params SqlParameter[] values) { using (SqlConnection conn = new SqlConnection(_ConnectionString)) { if (conn.State != ConnectionState.Open) conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.Parameters.Clear(); cmd.CommandText = safeSql; cmd.Parameters.AddRange(values); return cmd.ExecuteScalar(); } } } ///// ///// 执行sql查询,得到一个DataReader对象 ///// ///// sql查询语句 ///// DataReader对象 //public static SqlDataReader GetDataReader(string sql) //{ // using (SqlConnection conn = new SqlConnection(_ConnectionString)) // { // if (conn.State != ConnectionState.Open) // conn.Open(); // SqlCommand cmd = new SqlCommand(sql, conn); // SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); // return reader; // } //} /// /// 执行sql查询,得到一个DataReader对象,以参数方式传值 /// /// sql查询语句 /// 参数数组 /// DataReader对象 public static SqlDataReader GetDataReader(string sql, params SqlParameter[] values) { using (SqlConnection conn = new SqlConnection(_ConnectionString)) { if (conn.State != ConnectionState.Open) conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); cmd.Parameters.AddRange(values); SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); return reader; } } /// /// 执行sql查询,得到一个DataTable对象 /// /// sql查询语句 /// DataTable public static DataTable GetDataTable(string sql) { using (SqlConnection conn = new SqlConnection(_ConnectionString)) { if (conn.State != ConnectionState.Open) conn.Open(); DataSet ds = new DataSet(); SqlCommand cmd = new SqlCommand(sql, conn); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds); return ds.Tables[0]; } } /// /// 执行sql查询,得到一个DataTable对象,以参数方式传值 /// /// sql查询语句 /// 参数数组 /// DataTable public static DataTable GetDataTable(string sql, params SqlParameter[] values) { using (SqlConnection conn = new SqlConnection(_ConnectionString)) { if (conn.State != ConnectionState.Open) conn.Open(); DataSet ds = new DataSet(); SqlCommand cmd = new SqlCommand(sql, conn); if (values != null) cmd.Parameters.AddRange(values); SqlDataAdapter da = new SqlDataAdapter(cmd); try { da.Fill(ds); } catch (Exception) { } return ds.Tables[0]; } } /// /// 执行sql查询,得到一个DataSet对象 /// /// sql查询语句 /// DataSet public static DataSet GetDataSet(string sql) { using (SqlConnection conn = new SqlConnection(_ConnectionString)) { if (conn.State != ConnectionState.Open) conn.Open(); DataSet ds = new DataSet(); SqlCommand cmd = new SqlCommand(sql, conn); SqlDataAdapter da = new SqlDataAdapter(cmd); try { da.Fill(ds); } catch (Exception) { } return ds; } } /// /// 执行sql查询,得到一个DataSet对象,以参数方式传值 /// /// sql查询语句 /// 参数数组 /// DataSet public static DataSet GetDataSet(string sql, params SqlParameter[] values) { using (SqlConnection conn = new SqlConnection(_ConnectionString)) { if (conn.State != ConnectionState.Open) conn.Open(); DataSet ds = new DataSet(); SqlCommand cmd = new SqlCommand(sql, conn); if (values != null) cmd.Parameters.AddRange(values); SqlDataAdapter da = new SqlDataAdapter(cmd); try { da.Fill(ds); } catch (Exception) { } return ds; } } /// /// 事务 /// /// /// public static bool ExecuteTrasaction(string sqlStr) { bool result = true; using (SqlConnection conn = new SqlConnection(_ConnectionString)) { if (conn.State != ConnectionState.Open) conn.Open(); SqlTransaction tran = null; try { tran = conn.BeginTransaction("Tran"); SqlCommand cmd = new SqlCommand(sqlStr, conn, tran); cmd.ExecuteNonQuery(); tran.Commit(); result = true; } catch { tran.Rollback(); result = false; } } return result; } /// /// 事务 /// /// /// public static bool ExecuteTrasaction(List sqlStr) { bool result = true; using (SqlConnection conn = new SqlConnection(_ConnectionString)) { if (conn.State != ConnectionState.Open) conn.Open(); SqlTransaction tran = null; try { tran = conn.BeginTransaction("Tran"); for (int i = 0; i < sqlStr.Count; i++) { SqlCommand cmd = new SqlCommand(sqlStr[i], conn, tran); cmd.ExecuteNonQuery(); } tran.Commit(); result = true; } catch { tran.Rollback(); result = false; } } return result; } /// /// 拆箱获得int /// /// /// public static int GetInt(object obj) { return (int)obj; } /// /// 拆箱获得float /// /// /// public static float GetFloat(object obj) { return (float)obj; } /// /// 拆箱获得double /// /// /// public static double GetDouble(object obj) { return (double)obj; } /// /// 拆箱获得long /// /// /// public static long GetLong(object obj) { return (long)obj; } /// /// 拆箱获得decimal /// /// /// public static decimal GetDecimal(object obj) { return (decimal)obj; } /// /// 拆箱获得bool /// /// /// public static bool GetBoolean(object obj) { return (bool)obj; } /// /// 拆箱获得DateTime /// /// /// public static DateTime GetDateTime(object obj) { return (DateTime)obj; } /// /// 拆箱获得string /// /// /// public static string GetString(object obj) { return obj + ""; } public static DateTime SystemDate() { string sqlStr = "select getdate() as SysDate"; DataTable dt = GetDataTable(sqlStr); return DateTime.Parse(DateTime.Parse(dt.Rows[0]["SysDate"].ToString()).ToString("yyyy-MM-dd HH:mm:ss")); } public static bool QuickOpen(int timeout) { // We'll use a Stopwatch here for simplicity. A comparison to a stored DateTime.Now value could also be used Stopwatch sw = new Stopwatch(); bool connectSuccess = false; // Try to open the connection, if anything goes wrong, make sure we set connectSuccess = false Thread t = new Thread(delegate () { try { sw.Start(); using (SqlConnection conn = new SqlConnection(_ConnectionString)) { conn.Open(); connectSuccess = true; } } catch (Exception) { } }); // Make sure it's marked as a background thread so it'll get cleaned up automatically t.IsBackground = true; t.Start(); // Keep trying to join the thread until we either succeed or the timeout value has been exceeded while (timeout > sw.ElapsedMilliseconds) if (t.Join(1)) break; return connectSuccess; //// If we didn't connect successfully, throw an exception //if (!connectSuccess) // throw new Exception("Timed out while trying to connect."); } public static object Get(string sql, object obj, int id) { SqlCommand cmd = new SqlCommand(); SqlConnection conn = new SqlConnection(_ConnectionString); PrepareCommand(cmd, conn, sql, null); SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); while (reader.Read()) { foreach (PropertyInfo p in obj.GetType().GetProperties()) { if (p.Name == "OperationApplyId" || p.Name == "操作时间" || p.Name == "OpeRecord" || p.Name == "OpeInfo") { continue; } try { p.SetValue(obj, Convert.ChangeType(reader[p.Name], p.PropertyType), null); } catch (Exception) { //throw; } } } return obj; } private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, string cmdText, SqlParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.CommandText = cmdText; cmd.Connection = conn; cmd.CommandType = CommandType.Text; if (cmdParms != null) { cmd.Parameters.AddRange(cmdParms); } } public static SqlDataReader GetReader(string sql, params SqlParameter[] values) { SqlConnection connection = new SqlConnection(_ConnectionString); connection.Open(); SqlCommand cmd = new SqlCommand(sql, connection); cmd.Parameters.AddRange(values); SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); return reader; } #region ToEntity /// /// DataRow 转 实体 /// /// /// /// public static T ReaderToModel(IDataReader dr, bool isReaded = false) { try { if (isReaded == false) { if (dr.Read()) { return R2E(dr); } } else return R2E(dr); return default(T); } catch (Exception) { return default(T); } } /// /// SQL Reader 转 List /// /// /// /// public static List ReaderToList(IDataReader dr) { using (dr) { List list = new List(); Type modelType = typeof(T); T model = Activator.CreateInstance(); while (dr.Read()) { for (int i = 0; i < dr.FieldCount; i++) { PropertyInfo pi = modelType.GetProperty(dr.GetName(i), BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase); if (pi != null) { pi.SetValue(model, HackType(dr[i], pi.PropertyType), null); } } list.Add(model); } return list; } } /// /// 类型转换 /// /// /// /// private static object HackType(object value, Type conversionType) { if (conversionType.IsGenericType && conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) { if (value == null) return null; if (IsNullOrDBNull(value)) return null; System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(conversionType); conversionType = nullableConverter.UnderlyingType; } return Convert.ChangeType(value, conversionType); } /// /// DBNull 处理 /// /// /// private static bool IsNullOrDBNull(object obj) { return ((obj is DBNull) || string.IsNullOrEmpty(obj.ToString())) ? true : false; } /// /// 将Reader中数据转换为实体 /// /// /// /// private static T R2E(IDataReader dr) { Type modelType = typeof(T); T model = Activator.CreateInstance(); for (int i = 0; i < dr.FieldCount; i++) {//, BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase PropertyInfo pi = modelType.GetProperty(dr.GetName(i), BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase); //PropertyInfo pi = modelType.GetProperty(dr.GetName(i)); if (pi != null) { pi.SetValue(model, HackType(dr[i], pi.PropertyType), null); } } return model; } #endregion } }