Browse by Tags

COALESCE 發生字元設定不符合錯誤
同事報案,Dapper 查詢 ORACLE 時使用 COALESCE() 遇到 ORA-12704: character set mismatch(字元設定不符) 錯誤。 我用以下程式成功重現問題:(jefftest2.t 欄位為 NVARCHAR2) static void Main( string [] args) { using (var cn = new OracleConnection(csStr)) { var list = cn.Query( "select 1 from...
Posted 18 July 2017 10:35 PMJeffrey | with no comments 1,697
Filed under: , ,
SQLite 資料庫 C# 程式範例-使用 Dapper
最近想在 Coding4Fun 專案使用資料庫管理英文單字及測驗結果。情境本身有些小尷尬,評估規模與複雜度,若用資料物件配合序列化存檔實作有點吃力,搬出 SQL Express 又顯殺雞用牛刀,於是我想起免安裝又超級輕巧的 In-Process 資料庫首選- SQLite ! 完全沒有 SQLite 使用經驗,開啟 Visual Studio 寫個極簡範例當入門吧! 資料物件故意安排了 string、DateTime、int、byte[] 四種屬性,想測驗 SQLite 是否能滿足不同資料型別需求...
Posted 05 June 2017 08:06 AMJeffrey | with no comments 4,938
Filed under: ,
使用 Dapper 接收 Oracle Ref Cursor
沒實際遇到,但接連兩次被問到使用 Dapper 如何從 Ref Cursor 讀取結果,看來上天已強烈暗示我沒 PO 文分享,趕緊補上以免逆天遭譴。 爬文找到的做法都是靠自訂 OracleDynamicParameter 處理 Ref Cursor 對應轉換,循著 Stackoverlow 討論 找到一個 Gist 分享的 現成版本 ,將 OracleDynamicParameter.cs 加入專案,便可使用 OracleDynamicParameters 物件 .Add("cursor_name"...
Posted 17 April 2017 10:05 PMJeffrey | with no comments 2,658
Filed under: ,
由 Dapper 傳回 dynamic 物件取得欄位清單
不用預先宣告強型別,查詢資料表後直接傳回 dynamic 是 Dapper 的強項,例如:var list = cn.Query("SELECT Col1,Col2 FROM T).ToList(); 將傳回 List<dynamic>,用 list.Fisrt().Col1 就能讀取欄位內容,簡潔又方便。 最近有個花式應用,想用通用函式接收 Dapper 查詢結果,自動列舉其中包含屬性(資料庫欄位)。一開始依循 System.Refelction 思維,想說用 GetType...
Posted 24 March 2017 08:14 AMJeffrey | with no comments 4,626
Filed under:
Dapper +Oracle 之 DateTime 注意事項
同事報案,我先前寫的 Dapper 共用程式庫有 Bug,當 WHERE 條件包含日期型別時,將 DateTime 寫入 Oracle Date 欄位,接著用同 DateTime 值做 WHERE 比對,竟找不到剛才寫入的資料。 用以下範例重現問題: using (var cn = new OracleConnection(csOra)) { cn.Open(); cn.Execute( "TRUNCATE TABLE JEFFTEST" ); var idx = 1; var...
Posted 14 March 2017 11:21 PMJeffrey | with no comments 3,994
Filed under:
Hacking樂無窮:修正Dapper+ODP.NET無法寫入Unicode問題
歷經一段時間摸索歷練,確立「新増修改用EF/ORM,查詢一律用Dapper」的最高指導原則,Dapper的簡潔、效能與彈性無可挑剔,一切看似完美,直到我膝蓋中了一箭… 無意間發現,使用Dapper+ODP.NET無法寫入Unicode字元 跟Oracle Unicode問題奮戰 超過10年 ,以為妖孽已被降伏,用OracleDbType.NVarChar2應該就萬無一失,甚至要在CommandText中用N'…'也 不是問題 ,萬萬沒想到Oracle Unicode問題今天又跑出來咬我屁股...
Posted 21 August 2016 09:56 PMJeffrey | with no comments 5,920
Filed under: , ,
使用Oracle資料表保存GUID屬性
大家都知道我隸屬 GUID PK幫 .NET分舵,最近寫了個小模組,Model理所當然地使用GUID當作Primary Key,由於想同時支援SQL Server跟Oracle,第一次挑戰SQL跟Oracle共用Model。先前的GUID PK經驗都在SQL,SQL有 Uniqueidentifier型別 ,跟C#端的Guid型別能整到天衣無縫;同樣的情場搬到Oracle,就需要動點腦筋解決。 歷經一番摸索,心得如下: 該用什麼型別? Oracle沒有Uniqueidentifier可用,我心中的兩個選項是CHAR...
Posted 20 July 2016 06:17 AMJeffrey | with no comments 4,625
Filed under: ,
Dapper筆記:列舉轉VARCHAR研究
一個用資料表保存C# Model的常見問題,列舉型別屬性該怎麼處理? 例如有個BlogUser資料物件,包含Id、Name及Role三個屬性,其中Role是列舉,包含Admin、Editor、Blogger、Reader等項目。保存BlogUser的資料表設計如下,Role欄位定義為VARCHAR(8),目標為直接保存"Admin"、"Blogger"等字串內容,以期在SQL可使用WHERE Role = 'Blogger'進行篩選。 CREATE...
Posted 18 July 2016 09:46 PMJeffrey | with no comments 3,867
Filed under:
Dapper小技巧:以資料表保存集合物件JSON
專案常遇到的需求:為指定資料保留修改歷程,以備稽核檢查或追查責任之用,使用機率不高且無統計或隨興查詢需求,不值得另開資料表。此時我偏好的做法是定義成List<HistoryRecord>,在資料表開一個NVARCHAR(MAX)保存其JSON內容,調閱時讀取JSON反序列化還原內容,足以滿足規格所需。 用個實例說明,假設資料物件定義如下: public class HistoryRecord { public DateTime Time { get; set; } public string...
Posted 18 July 2016 12:57 AMJeffrey | with no comments 4,452
Filed under:
Dapper出現sql_variant is incompatible with ntext
有個古老資料庫,裡面還有NTEXT型別欄位(SQL 2005加入NVARCHAR(MAX)後,應該沒人想用TEXT/NTEXT了),用 Dapper 執行一段SQL更新NTEXT欄位,發生古怪錯誤。 指令如下: cn.Execute("UPDATE SomeTable SET NTextField = @data WHERE Id = 1", new { data = "…" }); 錯誤訊息為:sql_variant is incompatible with...
Posted 13 May 2016 08:05 AMJeffrey | with no comments 2,733
Filed under: ,
短小精悍的.NET ORM神器 -- Dapper
應該有很多人像我一樣,對LINQ的依賴已經到達 "LINQ or Die!"(不LINQ,吾寧死) 的地步,到了需要存取DB的場合,打死也不想再走ADO.NET + DataTable、DataRow的回頭路。不過,在專案引用EntityFramework或其他ORM解決方案(NHibernation、SubSonic...),固然嚴謹紮實,卻也多出額外工作--要依照Schema在專案定義Entity物件、資料庫變更時要記得同步更新Entity定義,遇到多TABLE JOIN查詢得另外宣告自訂類別承接查詢結果...
Posted 15 May 2014 06:30 AMJeffrey | 7 comment(s) 64,168
Filed under: ,

搜尋

Go

<August 2017>
SunMonTueWedThuFriSat
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication