csharp:Nhibernate Procedure with CreateSQLQuery

来源:http://www.cnblogs.com/geovindu/archive/2016/07/01/5633828.html
-Advertisement-
Play Games

...


<?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="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 li
                         orderby cardType.CardTypeName //名字排序
                         select cardType;

            return li;

        }

  

 /// <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;
        }
    }

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、前言 上回說到需要做放視頻的使用嚮導,這兩天公司里的老司機一直幫我答疑解惑,讓這個任務變得挺順的,真心感謝他們! 這次與【1】中的不同之處在於: (1)播放和暫停按鈕集成在<MediaElement>的點擊事件之中,點一下是播放,再點一下是暫停 (2)加入了微軟官方改寫的粒子特效 (3)加上了自 ...
  • SQL語句中: 1 2 3 4 1)select * from TableName where StartTime > '2015-04-08' 2)select * from TableName where StartTime >= '2015-04-08' 3)select * from Tab ...
  • 增加: 第一種方法:Response.Cookies[“UserName”].Value=”張三” Response.Cookies[“UserName”].Expires=DateTime.Now.AddDays(1); 第二種方法: HttpCookie cookie=new HttpCooki ...
  • 一步一步造個Ioc輪子目錄 定義容器 首先,我們來畫個大餅,定義好構造函數,註冊函數及獲取函數這幾個最基本的使用方法 接下來我們把上一篇魔改過的泛型工廠再魔改一下,我們把這個工廠去掉static再添加支持泛型委托創建對象的註冊方法,由於整個Ioc設計不是靜態使用的,所以工廠里的內部類static r ...
  • 第一步:新建一個類實現IEqualityComparer<ActionInfo>介面,用實現此介面的方法。 第二步:複雜類型集合=複雜類型集合.Distinct(new 新建類()).ToList(); 例子: 1.新建的類 public class ActionEqualCompare:IEqua ...
  • 創建上下文對象:WordBoradEntities db = new WordBoradEntities(); 添加://1.1創建實體對象 User uObj = new User() { uName = "劉德華", uLoginName = "aaa", uPwd = "asdfasdfasd ...
  • 還是先上效果圖: 看完了上一篇UWP Composition API - GroupListView(一)的童鞋會問,這不是跟上一篇一樣的嗎??? 騙點擊的?? No,No,其實相對上一個有更簡單粗暴的方案,因為上篇是為了研究Composition API,所以含著淚都要做完(有沒有被騙的趕腳)。。 ...
  • 最終我決定通過webbrowser模擬登陸支付寶,獲取數據。根據業務需求,我需要把獲取支付寶的數據做成介面,供業務去調用。難點在於如何可以穩定的切換賬號,並且保證服務24小時可用。需要處理一系列的異常和超時。缺點是這邊變成單線程,登錄獲取數據只能一個進行完了再進行下一個。 簡單列下登錄流程 爬蟲服務 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...