using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.Common; using System.Data.SqlClient; using Microsoft.Practices.EnterpriseLibrary.Data; namespace WebSqlHelper { public class DbHelper { protected Database db; protected Database CreateDatabase(string name) { return db = DatabaseFactory.CreateDatabase(name); } protected Database CreateDatabase() { return db = DatabaseFactory.CreateDatabase(); } public DbHelper(string name) { //db = DatabaseFactory.CreateDatabase(name); } public DbHelper() { //db = DatabaseFactory.CreateDatabase(); } public virtual DataSet LoadDataSet(string[] table, string str, params DbParameter[] param) { DbCommand cmd = db.GetSqlStringCommand(str); cmd.Parameters.AddRange(param); DataSet ds = new DataSet(); db.LoadDataSet(cmd, ds, table); return ds; } #region Parameter public virtual DbParameter GetParameter() { return db.DbProviderFactory.CreateParameter(); } /// /// Configures a given . /// /// The to configure. /// The name of the parameter. /// One of the values. /// The maximum size of the data within the column. /// One of the values. /// Avalue indicating whether the parameter accepts (Nothing in Visual Basic) values. /// The maximum number of digits used to represent the . /// The number of decimal places to which is resolved. /// The name of the source column mapped to the DataSet and used for loading or returning the . /// One of the values. /// The value of the parameter. protected virtual void ConfigureParameter(DbParameter param, string name, DbType dbType, int size, ParameterDirection direction, bool nullable, byte precision, byte scale, string sourceColumn, DataRowVersion sourceVersion, object value) { param.ParameterName = name; param.DbType = dbType; param.Size = size; param.Value = (value == null) ? DBNull.Value : value; param.Direction = direction; param.IsNullable = nullable; param.SourceColumn = sourceColumn; param.SourceVersion = sourceVersion; } public virtual DbParameter GetParameter(string name, object value) { DbParameter param = GetParameter(); ConfigureParameter(param, name, DbType.String, 0, ParameterDirection.Input, true, 0, 0, String.Empty, DataRowVersion.Default, value); return param; } public virtual DbParameter GetParameter(string name, object value, DbType dbtype) { DbParameter param = GetParameter(); ConfigureParameter(param, name, dbtype, 0, ParameterDirection.Input, true, 0, 0, String.Empty, DataRowVersion.Default, value); return param; } #endregion public virtual DbCommand GetSqlStringCommand(string query, params DbParameter[] param) { DbCommand cmd = db.GetSqlStringCommand(query); cmd.Parameters.Clear(); if (param != null && param.Length > 0) { foreach (DbParameter pr in param) cmd.Parameters.Add(GetParameter(pr.ParameterName, pr.Value, pr.DbType)); } return cmd; } #region 返回数据 #region 通过Sql语句返回数据 public virtual DataSet GetSqlStrDataSet(string query, params DbParameter[] param) { return GetSqlStrDataSet(null, query, param); } public virtual DataSet GetSqlStrDataSet(DbTransaction tran, string query, params DbParameter[] param) { try { if (tran != null) return db.ExecuteDataSet(GetSqlStringCommand(query, param), tran); else return db.ExecuteDataSet(GetSqlStringCommand(query, param)); } catch (Exception ee) { throw new Exception(ee.Message + query); } } public virtual DataTable GetSqlStrTable(string query, params DbParameter[] param) { return GetSqlStrTable(null, query, param); } public virtual DataTable GetSqlStrTable(DbTransaction tran, string query, params DbParameter[] param) { DataSet ds = GetSqlStrDataSet(tran, query, param); if (ds != null && ds.Tables.Count > 0) return ds.Tables[0]; return null; } public virtual DataRow GetSqlStrRow(string query, params DbParameter[] param) { return GetSqlStrRow(null, query, param); } public virtual DataRow GetSqlStrRow(DbTransaction tran, string query, params DbParameter[] param) { DataSet ds = GetSqlStrDataSet(tran, query, param); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) return ds.Tables[0].Rows[0]; return null; } public virtual object GetSqlStrScalar(string query, params DbParameter[] param) { return GetSqlStrScalar(null, query, param); } public virtual object GetSqlStrScalar(DbTransaction tran, string query, params DbParameter[] param) { if (tran != null) return db.ExecuteScalar(GetSqlStringCommand(query, param), tran); else return db.ExecuteScalar(GetSqlStringCommand(query, param)); } #endregion #region 通过存储过程语句返回数据 public virtual DataSet GetSpDataSet(string proc, params object[] param) { return GetSpDataSet(null, proc, param); } public virtual DataSet GetSpDataSet(DbTransaction tran, string proc, params object[] param) { //object[] paras = (param!=null?new object[param.Length ]:new object[1]); //for(int i=0;i 0) return ds.Tables[0]; return null; } public virtual DataRow GetSpRow(string query, params object[] param) { return GetSpRow(null, query, param); } public virtual DataRow GetSpRow(DbTransaction tran, string query, params object[] param) { DataSet ds = GetSpDataSet(tran, query, param); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) return ds.Tables[0].Rows[0]; return null; } public virtual object GetSpScalar(string query, params object[] param) { return GetSpScalar(null, query, param); } public virtual object GetSpScalar(DbTransaction tran, string query, params object[] param) { if (tran != null) return db.ExecuteScalar(query, param, tran); else return db.ExecuteScalar(query, param); } #endregion #endregion #region 直接执行 public virtual int SetSqlStrNonQuery(string query, params DbParameter[] param) { return SetSqlStrNonQuery(null, query, param); } public virtual int SetSqlStrNonQuery(string query, LogHelper Opertor, params DbParameter[] param) { return SetSqlStrNonQuery(null, query, Opertor, param); } public virtual int SetSqlStrNonQuery(DbTransaction tran, string query, LogHelper Opertor, params DbParameter[] param) { //记录日志的执行方法 //@Opertor 操作信息 int result = 0; DbCommand dbcomm = GetSqlStringCommand(query, param); try { if (tran != null) result = db.ExecuteNonQuery(dbcomm, tran); else result = db.ExecuteNonQuery(dbcomm); //无执行错误,记录日志 Opertor.ExecLoger(dbcomm); return result; } catch (Exception ex) { throw ex; } } public virtual int SetSqlStrNonQuery(DbTransaction tran, string query, params DbParameter[] param) { DbCommand comm = GetSqlStringCommand(query, param); if (tran != null) return db.ExecuteNonQuery(GetSqlStringCommand(query, param), tran); else return db.ExecuteNonQuery(GetSqlStringCommand(query, param)); } public virtual int SetSpNonQuery(string proc, params object[] param) { return db.ExecuteNonQuery(proc, param); } public virtual int SetSpNonQuery(DbTransaction tran, string proc, params DbParameter[] param) { if (tran != null) return db.ExecuteNonQuery(proc, param, tran); else return db.ExecuteNonQuery(proc, param); } #endregion #region Connection,Transaction public virtual DbConnection CreateConnection() { return db.CreateConnection(); } public class TransWraper { public string Sql; public List Param; public TransWraper(string sql, params DbParameter[] param) { Sql = sql; if (param != null && param.Length > 0) { Param = new List(); Param.AddRange(param); } } } public virtual void ExecuteTran(List query) { using (DbConnection conn = CreateConnection()) { conn.Open(); DbTransaction tran = conn.BeginTransaction(); try { foreach (TransWraper tw in query) { if (tw != null) SetSqlStrNonQuery(tran, tw.Sql, tw.Param.ToArray()); else SetSqlStrNonQuery(tran, tw.Sql); } //SetSqlStrTranNonQuery(query, param); tran.Commit(); } catch { tran.Rollback(); } } } #endregion #region 分页函数 public virtual DataTable ExecutePager(string tbname, string fields, string where, string orderby, int pagesize, int pageindex, ref int recordcount) { return null; } public virtual DataTable ExecutePager(string tbname, string fields, string where, string orderby, int pagesize, int pageindex, System.Data.Common.DbParameter[] param, ref int recordcount) { return null; } #endregion #region 自增 public virtual int GetNext(string table, string field) { return GetNext(null, table, field); } public virtual int GetNext(DbTransaction tran, string table, string field) { object c = GetSqlStrScalar("select max(nvl2(translate(" + field + ",'\\1234567890','\\'),0," + field + ")) from " + table); if (c == null || c is DBNull) return 1; return int.Parse(c.ToString()) + 1; } public Guid GetNext() { return Guid.NewGuid(); } public virtual string GetNext(DbTransaction tran, string table, string field, string format) { switch (format) { case "D": case "d"://080128 object c = GetSqlStrScalar("select max(case when ISNUMERIC(" + field + ")=1 then " + field + " else 0 end) from " + table + " where " + field + " like '" + DateTime.Now.ToString("yyMMdd") + "%'"); if (c == null || c is DBNull) return DateTime.Now.ToString("yyMMdd") + "001"; else { string s1 = c.ToString().Substring(0, 6); string s2 = c.ToString().Substring(6); return s1 + (Int64.Parse(s2) + 1).ToString().PadLeft(3, '0'); } break; } return GetNext(tran, table, field).ToString(); } #endregion public virtual bool IsExist(string table, string field, string value) { return Convert.ToInt16(GetSqlStrScalar("select count(*) from " + table + " where " + field + "=@" + field, GetParameter(field, value))) > 0; } #region yjy 执行默认的sql文本 //public virtual int SetSqlStrNonQuery(string query) //{ // return SetSqlStrNonQuery(null, query); //} //public virtual int SetSqlStrNonQuery(DbTransaction tran, string query) //{ // if (tran != null) // return db.ExecuteNonQuery(GetSqlStringCommand(query,null),tran); // else // return db.ExecuteNonQuery( GetSqlStringCommand(query,null)); //} #endregion } }