<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="Domain" namespace="Domain" xmlns="urn:nhibernate-mapping-2.2"><class name="DuCardType" table="DuCardType" lazy="true" ><id name="CardTypeId" column="CardTypeId"><generator class="identity" /></id><property name="CardTypeName"><column name="CardTypeName" sql-type="nvarchar" not-null="true" /></property><property name="CardTypeColor"><column name="CardTypeColor" sql-type="nvarchar" not-null="true" /></property><sql-insert name="InsertDuCardType">exec proc_Insert_DuCardType ?,?,?</sql-insert><!--<sql-insert name="SqlInsertDuCardType">INSERT INTO DuCardType (CardTypeName, CardTypeColor) VALUES (?,?,?)</sql-insert>--><!--<sql-insert><sql-update><sql-delete>--></class>
</hibernate-mapping>
///<summary>/// 追加记录返回值///</summary>///<param name="DuCardType">输入参数:DuCardTypeInfo</param>///<param name="CardTypeId">返回参数:CardTypeId</param>///<returns>返回是否添加的个数</returns>public int InsertDuCardTypeOutput(DuCardType cardType, out int cardTypeId){int sid = 1;NHibernate.ISession session = this.SessionFactory.GetCurrentSession();ITransaction tran = session.BeginTransaction();try{session.Save(cardType);cardTypeId = cardType.CardTypeId;tran.Commit();}catch (MappingException ex){sid = 0;tran.Rollback();throw ex;}return sid;//return dal.InsertDuCardTypeOutput(duCardType,out cardTypeId);}
///<summary>///修改记录///</summary>///<param name="DuCardType">输入参数:DuCardTypeInfo</param>///<returns>返回修改的多少记录数</returns>public int UpdateDuCardType(DuCardType duCardType){int sid = 1;NHibernate.ISession session = this.SessionFactory.GetCurrentSession();ITransaction tran = session.BeginTransaction();try{session.Update(duCardType);tran.Commit();}catch (Exception ex){sid = 0;tran.Rollback();throw ex;}return sid;//return dal.UpdateDuCardType(duCardType);}
/// <summary>/// 删除/// </summary>/// <param name="customer"></param>/// <returns></returns>public int Dell(DuCardType cardType){int sid = 1;NHibernate.ISession session = this.SessionFactory.GetCurrentSession();ITransaction tran = session.BeginTransaction();try{session.Delete(cardType);tran.Commit();}catch (Exception ex){sid = 0;tran.Rollback();throw ex;}return sid;}
///<summary>/// 删除记录///</summary>///<param name="cardTypeId">输入参数:CardTypeId</param>///<returns>返回删除记录条数</returns>public bool DeleteDuCardType(int cardTypeId){bool isok = false;try{IDbDataParameter[] par = new SqlParameter[]{ new SqlParameter(),};par[0].ParameterName = "CardTypeId";par[0].Value = cardTypeId;isok = DBHelper.ExecuteNonQuery(SessionFactory, CommandType.StoredProcedure, "proc_Delete_DuCardType");}catch (NotImplementedException ex){ex.Message.ToString();}return isok;//return dal.DeleteDuCardType(cardTypeId);}/// <summary>/// 删除/// </summary>/// <param name="customer"></param>/// <returns></returns>public int Dell(DuCardType cardType){int sid = 1;NHibernate.ISession session = this.SessionFactory.GetCurrentSession();ITransaction tran = session.BeginTransaction();try{session.Delete(cardType);tran.Commit();}catch (Exception ex){sid = 0;tran.Rollback();throw ex;}return sid;}///<summary>/// 删除多条记录///</summary>///<param name="cardTypeId">输入参数:CardTypeId</param>///<returns>返回删除多少记录</returns>public bool DeleteDuCardTypeId(string cardTypeId){bool isok = false; try{IDbDataParameter[] par = new SqlParameter[]{ new SqlParameter(),};par[0].ParameterName = "CardTypeId";par[0].Value = cardTypeId;isok = DBHelper.ExecuteNonQuery(SessionFactory, CommandType.StoredProcedure, "proc_Delete_DuCardTypeId");}catch (NotImplementedException ex){ex.Message.ToString();}return isok;//return dal.DeleteDuCardTypeId(cardTypeId);}
/// <summary>/// /// </summary>/// <param name="id"></param>/// <returns></returns>public IList<DuCardType> CardTypeSql(int id){NHibernate.ISession session = this.SessionFactory.GetCurrentSession();IList<DuCardType> card = new List<DuCardType>();if (!object.Equals(session, null)){//写法1//return _session.CreateQuery("from DuCardType c where c.CardTypeName='" + firstname + "'")// .List<DuCardType>();//写法2:位置型参数//return _session.CreateQuery("from DuCardType c where c.CardTypeName=?")// .SetString(0, firstname)// .List<DuCardType>();//写法4.//var sql = "select * from DuCardType";//var query = session.CreateSQLQuery(sql)//.AddScalar("CardTypeId", NHibernateUtil.Int32)//.AddScalar("CardTypeName", NHibernateUtil.String)//.AddScalar("CardTypeColor", NHibernateUtil.String)//.SetResultTransformer(Transformers.AliasToBean<DuCardType>());//result = query.List<DuCardType>(); //写法3:命名型参数(推荐)var query = session.CreateSQLQuery("Select * FROM DuCardType where CardTypeId=:CardTypeId").SetInt32("CardTypeId", id).SetResultTransformer(Transformers.AliasToBean(typeof(DuCardType)));card = query.List<DuCardType>();}return card;}/// <summary>/// 存储过程/// </summary>/// <param name="id"></param>/// <returns></returns>public IList<DuCardType> CardTypeProcedures(int id){//读到数据IList<DuCardType> li = null;NHibernate.ISession session = this.SessionFactory.GetCurrentSession();string sql = @"exec proc_Select_DuCardType :CardTypeId";IQuery query = session.CreateSQLQuery(sql).SetInt32("CardTypeId", id);var list = query.List();foreach (object[] item in list){li =new List<DuCardType>();var cardType = new DuCardType();cardType.CardTypeId = (int)item[0];cardType.CardTypeName = (string)item[1];cardType.CardTypeColor = item[2].ToString();li.Add(cardType);}//query = query.SetResultTransformer(Transformers.AliasToBean<OrderDto>());//var list2 = query.List<OrderDto>();var result = from cardType in liorderby cardType.CardTypeName //名字排序select cardType;return li;}
GetNamedQuery: 存储过程
/// <summary>/// 存储过程查询/// </summary>/// <param name="id"></param>/// <returns></returns>public IList<DuCardType> CardTypeProcedures(int id){//读到数据IList<DuCardType> li = null;NHibernate.ISession session = this.SessionFactory.GetCurrentSession();try{IQuery query = session.GetNamedQuery("proc_Select_DuCardType").SetParameter("CardTypeId", id).SetResultTransformer(Transformers.AliasToBean(typeof(DuCardType)));li = query.List<DuCardType>();//var executor = new HibernateStoredProcedureExecutor(session);//var lie = executor.ExecuteStoredProcedure<DuCardType>(// "proc_Select_DuCardType", //find no// new[]// {// new SqlParameter("CardTypeId", id),// //new SqlParameter("startDate", startDate),// // new SqlParameter("endDate", endDate),// });//li = lie.ToList();//return li;//string sql = @"exec proc_Select_DuCardType :CardTypeId";//IQuery query = session.CreateSQLQuery(sql)// .SetInt32("CardTypeId", id);//var list = query.List();//foreach (object[] item in list)//{// li = new List<DuCardType>();// var cardType = new DuCardType();// cardType.CardTypeId = (int)item[0];// cardType.CardTypeName = (string)item[1];// cardType.CardTypeColor = item[2].ToString();// li.Add(cardType);//}query = query.SetResultTransformer(Transformers.AliasToBean<OrderDto>());var list2 = query.List<OrderDto>();//var result = from cardType in li// orderby cardType.CardTypeName //名字排序// select cardType;}catch (MappingException ex){ex.Message.ToString();}return li;}
/// <summary>/// Linq查询/// </summary>/// <param name="id"></param>/// <returns></returns>public IQueryable<DuCardType> getCardTypeID(int id){NHibernate.ISession session = this.SessionFactory.GetCurrentSession();var query = session.Query<DuCardType>();var result = from cardType in querywhere cardType.CardTypeId == idselect cardType;return result;}
/// <summary>/// 存储过程分页/// 涂聚文 2016.07.03/// </summary>/// <param name="strwhere">Where条件</param>/// <param name="aecdesc">排序字段</param>/// <param name="pageIndex">开始页码</param>/// <param name="pageSize">页大小</param>/// <param name="RecordCount">输出总页数</param>/// <returns></returns>public DataTable GetDataPage(string strwhere, string aecdesc, int pageIndex, int pageSize, out int RecordCount){NHibernate.ISession session = this.SessionFactory.GetCurrentSession();DataSet data = new DataSet();try{//SessionFactory.ConnectionProvider.DriverIDbCommand cmd = SessionFactory.OpenSession().Connection.CreateCommand();//cmd.CommandText = "testaa";//IDbConnection con = session.Connection;//Type conType = con.GetType();//string conTypeName = conType.FullName;// if (!conTypeName.EndsWith("Connection"))// throw new Exception("Unable to interpret connection type name: " + conTypeName);//string adapterTypeName = conTypeName.Substring(0, conTypeName.Length - 10) + "DataAdapter";IDbDataAdapter adapter = new SqlDataAdapter();//IDbDataAdapter adapter = conType.Assembly.CreateInstance(adapterTypeName) as IDbDataAdapter;//if (adapter == null)// throw new Exception("Unable to load IDbDataAdapter: " + adapterTypeName); // IDbCommand cmd = con.CreateCommand();cmd.CommandText = "GetPagedRecordFor2005_2008";cmd.CommandType = CommandType.StoredProcedure;IDbDataParameter p = cmd.CreateParameter();IDbDataParameter p1 = cmd.CreateParameter();IDbDataParameter p2 = cmd.CreateParameter();IDbDataParameter p3 = cmd.CreateParameter();IDbDataParameter p4 = cmd.CreateParameter();IDbDataParameter p5 = cmd.CreateParameter();IDbDataParameter p6 = cmd.CreateParameter();// IDbDataParameter p7 = cmd.CreateParameter();if (string.IsNullOrEmpty(strwhere)){strwhere = " 1=1 ";}p.ParameterName = "Table";p.Value = "DuCardType";p1.ParameterName = "TIndex";p1.Value = "CardTypeId";p2.ParameterName = "Column";p2.Value = " * "; p3.ParameterName = "Sql";p3.Value = strwhere;p4.ParameterName = "PageIndex";p4.Value = pageIndex;p5.ParameterName = "PageSize";p5.Value = pageSize;p6.ParameterName = "Sort";p6.Value = aecdesc;//p1.ParameterName = "geovindu";//p1.Size = 10;//p1.Direction = ParameterDirection.Output;//p7.ParameterName = "TotalRecords";//p7.Size = 10;//p7.Direction = ParameterDirection.Output;cmd.Parameters.Add(p);cmd.Parameters.Add(p1);cmd.Parameters.Add(p2);cmd.Parameters.Add(p3);cmd.Parameters.Add(p4);cmd.Parameters.Add(p5);cmd.Parameters.Add(p6);// cmd.Parameters.Add(p7);adapter.SelectCommand = cmd;adapter.Fill(data);//RecordCount =(int)p7.Value; cmd.Cancel();cmd.Dispose();RecordCount = data.Tables[0].Rows.Count;}catch (NotImplementedException ex){RecordCount = 0;ex.Message.ToString();}return data.Tables[0];// return dal.GetDataPage(strwhere, aecdesc, pageIndex, pageSize, out RecordCount);}
/// <summary>/// 存储过程分页/// 涂聚文 2016.07.03/// </summary>/// <param name="strwhere">Where条件</param>/// <param name="aecdesc">排序字段</param>/// <param name="pageIndex">开始页码</param>/// <param name="pageSize">页大小</param>/// <param name="RecordCount">输出总页数</param>/// <returns></returns>public DataTable GetDataPage(string strwhere, string aecdesc, int pageIndex, int pageSize, out int RecordCount){NHibernate.ISession session = this.SessionFactory.GetCurrentSession();DataSet data = new DataSet();try{//SessionFactory.ConnectionProvider.DriverIDbCommand cmd = SessionFactory.OpenSession().Connection.CreateCommand();//cmd.CommandText = "testaa";//IDbConnection con = session.Connection;//Type conType = con.GetType();//string conTypeName = conType.FullName;// if (!conTypeName.EndsWith("Connection"))// throw new Exception("Unable to interpret connection type name: " + conTypeName);//string adapterTypeName = conTypeName.Substring(0, conTypeName.Length - 10) + "DataAdapter";IDbDataAdapter adapter = new SqlDataAdapter();//IDbDataAdapter adapter = conType.Assembly.CreateInstance(adapterTypeName) as IDbDataAdapter;//if (adapter == null)// throw new Exception("Unable to load IDbDataAdapter: " + adapterTypeName); // IDbCommand cmd = con.CreateCommand();//1.// cmd.CommandText = "GetPagedRecordFor2005_2008";// cmd.CommandType = CommandType.StoredProcedure;// IDbDataParameter p = new SqlParameter();// cmd.CreateParameter();// IDbDataParameter p1 = cmd.CreateParameter();// IDbDataParameter p2 = cmd.CreateParameter();// IDbDataParameter p3 = cmd.CreateParameter();// IDbDataParameter p4 = cmd.CreateParameter();// IDbDataParameter p5 = cmd.CreateParameter();// IDbDataParameter p6 = cmd.CreateParameter();IDbDataParameter p7 = cmd.CreateParameter();// if (string.IsNullOrEmpty(strwhere))// {// strwhere = " 1=1 ";// }// p.ParameterName = "Table";// p.Value = "DuCardType";// p1.ParameterName = "TIndex";// p1.Value = "CardTypeId";// p2.ParameterName = "Column";// p2.Value = " * "; // p3.ParameterName = "Sql";// p3.Value = strwhere;// p4.ParameterName = "PageIndex";// p4.Value = pageIndex;// p5.ParameterName = "PageSize";// p5.Value = pageSize;// p6.ParameterName = "Sort";// p6.Value = aecdesc;// //p1.ParameterName = "geovindu";// //p1.Size = 10;// //p1.Direction = ParameterDirection.Output;//输出值// //p7.ParameterName = "TotalRecords";// //p7.Size = 10;// //p7.Direction = ParameterDirection.Output;// cmd.Parameters.Add(p);// cmd.Parameters.Add(p1);// cmd.Parameters.Add(p2);// cmd.Parameters.Add(p3);// cmd.Parameters.Add(p4);// cmd.Parameters.Add(p5);// cmd.Parameters.Add(p6);cmd.Parameters.Add(p7);// adapter.SelectCommand = cmd;// adapter.Fill(data);// //RecordCount =(int)p7.Value; // cmd.Cancel();// cmd.Dispose();//2. IDbDataParameter[] par = new SqlParameter[]{new SqlParameter(), //表名new SqlParameter(),//主键,可以带表头new SqlParameter(),//读取字段new SqlParameter(),//Where条件new SqlParameter(),//开始页码new SqlParameter(),//页大小new SqlParameter(),//排序字段};if (string.IsNullOrEmpty(strwhere)){strwhere = " 1=1 ";}par[0].ParameterName = "Table"; //表名par[0].Value="DuCardType";par[1].ParameterName = "TIndex";par[1].Value = "CardTypeId";par[2].ParameterName = "Column";par[2].Value = " * ";par[3].ParameterName = "Sql";//查询条件par[3].Value = strwhere;par[4].ParameterName = "PageIndex";par[4].Value = pageIndex;par[5].ParameterName = "PageSize";par[5].Value = pageSize;par[6].ParameterName = "Sort";par[6].Value = aecdesc;data = DBHelper.ExecuteDataSet(SessionFactory, CommandType.StoredProcedure, "GetPagedRecordFor2005_2008", par);RecordCount = data.Tables[0].Rows.Count;}catch (NotImplementedException ex){RecordCount = 0;ex.Message.ToString();}return data.Tables[0];// return dal.GetDataPage(strwhere, aecdesc, pageIndex, pageSize, out RecordCount);}
/// <summary>/// 2016 geovindu/// </summary>public static class IListConverDataTable{/// <summary>/// /// </summary>/// <typeparam name="T"></typeparam>/// <param name="data"></param>/// <returns></returns>public static DataTable ToDataTable<T>(this IList<T> data){PropertyDescriptorCollection properties =TypeDescriptor.GetProperties(typeof(T));DataTable table = new DataTable();foreach (PropertyDescriptor prop in properties)table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);foreach (T item in data){DataRow row = table.NewRow();foreach (PropertyDescriptor prop in properties)row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;table.Rows.Add(row);}return table;}/// <summary>/// /// </summary>/// <param name="list"></param>/// <returns></returns>public static DataTable ToDataTable(IList list){DataTable result = new DataTable();if (list.Count > 0){PropertyInfo[] propertys = list[0].GetType().GetProperties();foreach (PropertyInfo pi in propertys){result.Columns.Add(pi.Name, pi.PropertyType);}for (int i = 0; i < list.Count; i++){ArrayList tempList = new ArrayList();foreach (PropertyInfo pi in propertys){object obj = pi.GetValue(list[i], null);tempList.Add(obj);}object[] array = tempList.ToArray();result.LoadDataRow(array, true);}}return result;}}
DBHelper.cs
//private IDbConnection _idbConnection;private IDataReader _iDataReader;private IDbCommand _idbCommand;private IDbTransaction _idbTransaction;private IDbDataParameter[] _idbParameters;/// <summary>/// /// </summary>public IDbConnection Connection{get { return _idbConnection; }set { _idbConnection = value; }}public IDataReader DataReader{get { return _iDataReader; }set { _iDataReader = value; }}public IDbCommand Command{get { return _idbCommand; }set { _idbCommand = value; }}public IDbTransaction Transaction{get { return _idbTransaction; }set { _idbTransaction = value; }}public IDbDataParameter[] Parameters{get { return _idbParameters; }set { _idbParameters = value; }}public static IDbTransaction GetTransaction(NHibernate.ISession session) { IDbConnection iDbConnection = session.Connection; IDbTransaction iDbTransaction = iDbConnection.BeginTransaction(); return iDbTransaction; }public static IDbDataParameter[] GetParameters(int paramsCount){IDbDataParameter[] idbParams = new IDbDataParameter[paramsCount];for (int i = 0; i < paramsCount; i++){idbParams[i] = new SqlParameter();}return idbParams; }/// <summary>/// /// </summary>/// <param name="paramsCount"></param>public void CreateParameters(int paramsCount){Parameters = new IDbDataParameter[paramsCount];Parameters = GetParameters(paramsCount);}public void AddParameters(int index, string paramName, object objValue){if (index < Parameters.Length){Parameters[index].ParameterName = paramName;Parameters[index].Value = objValue;}}/// <summary>/// /// </summary>/// <param name="sessionFactory"></param>/// <param name="commandType"></param>/// <param name="commandText"></param>/// <returns></returns>public IDataReader ExecuteReader(NHibernate.ISessionFactory sessionFactory, CommandType commandType, string commandText){Command = sessionFactory.OpenSession().Connection.CreateCommand();Command.Connection = Connection;PrepareCommand(Command, Connection, Transaction, commandType, commandText, Parameters);DataReader = Command.ExecuteReader();Command.Parameters.Clear();return DataReader;}/// <summary>/// /// </summary>/// <param name="sessionFactory"></param>/// <param name="commandType"></param>/// <param name="commandText"></param>/// <returns></returns>public int ExecuteNonQuery(NHibernate.ISessionFactory sessionFactory, CommandType commandType, string commandText){Command = sessionFactory.OpenSession().Connection.CreateCommand(); PrepareCommand(Command, Connection, Transaction, commandType, commandText, Parameters);int returnValue = Command.ExecuteNonQuery();Command.Parameters.Clear();return returnValue;}public object ExecuteScalar(NHibernate.ISessionFactory sessionFactory, CommandType commandType, string commandText){Command = sessionFactory.OpenSession().Connection.CreateCommand(); PrepareCommand(Command, Connection, Transaction, commandType, commandText, Parameters);object returnValue = Command.ExecuteScalar();Command.Parameters.Clear();return returnValue;}/// <summary>/// /// </summary>/// <param name="sessionFactory"></param>/// <param name="commandType"></param>/// <param name="commandText"></param>/// <returns></returns>public DataSet ExecuteDataSet(NHibernate.ISessionFactory sessionFactory, CommandType commandType, string commandText){Command = sessionFactory.OpenSession().Connection.CreateCommand(); PrepareCommand(Command, Connection, Transaction, commandType, commandText, Parameters);IDbDataAdapter dataAdapter = new SqlDataAdapter(); //根据不同的数据库选择不同的数据库dataAdapter.SelectCommand = Command;DataSet dataSet = new DataSet();dataAdapter.Fill(dataSet);Command.Parameters.Clear();return dataSet;}/// <summary>/// /// </summary>/// <param name="sessionFactory"></param>/// <param name="commandType"></param>/// <param name="commandText"></param>/// <param name="sqlParams"></param>/// <returns></returns>public DataSet ExecuteDataSet(NHibernate.ISessionFactory sessionFactory, CommandType commandType, string commandText, IDbDataParameter[] sqlParams){Command = sessionFactory.OpenSession().Connection.CreateCommand();PrepareCommand(Command, Connection, Transaction, commandType, commandText, sqlParams);IDbDataAdapter dataAdapter = new SqlDataAdapter(); //根据不同的数据库选择不同的数据库dataAdapter.SelectCommand = Command;DataSet dataSet = new DataSet();dataAdapter.Fill(dataSet);Command.Parameters.Clear();return dataSet;} /// <summary>/// /// </summary>/// <param name="command"></param>/// <param name="commandParameters"></param>private void AttachParameters(IDbCommand command, IDbDataParameter[] commandParameters){foreach (IDbDataParameter idbParameter in commandParameters){if (idbParameter.Direction == ParameterDirection.InputOutput && idbParameter.Value == null){idbParameter.Value = DBNull.Value;}command.Parameters.Add(idbParameter);}} /// <summary>/// /// </summary>/// <param name="command"></param>/// <param name="connection"></param>/// <param name="transaction"></param>/// <param name="commandType"></param>/// <param name="commandText"></param>/// <param name="commandParameters"></param>private void PrepareCommand(IDbCommand command, IDbConnection connection, IDbTransaction transaction,CommandType commandType, string commandText, IDbDataParameter[] commandParameters){command.Connection = connection;command.CommandText = commandText;command.CommandType = commandType;if (transaction != null){command.Transaction = transaction;}if (commandParameters != null){AttachParameters(command, commandParameters);}}