Browse by Tags

使用陣列參數執行SQL WHERE IN比對
傳入字串或數字陣列當作篩選參數是很常見的SQL查詢情境,例如: 使用者在UI勾選取10項類別代碼,希望從Products資料表找出這10類的所有產品,轉換成SQL語法,相當於SELECT * FROM Products WHERE CategoryId IN (1,3,8,...,215)。 遇到這類需求,好傻好天真的開發者不小心會寫成恐怖的 SQL Injection自殺式查詢 : string sql = "SELECT * FROM Products WHERE CategoryId...
Posted 08 May 2014 10:01 PMJeffrey | with no comments 22,469
Filed under: ,
【茶包射手日記】只涉及單一資料表的Deadlock
在我原本狹隘的SQL知識裡,Deadlock發生情境需要兩個Process A與B跟兩個Table X與Y搭配演出: A鎖定住X想更新Y,B鎖定Y等著要更新X,產生無解的僵持,再由SQL二者擇一選為犠牲者,令其失敗來成立另一個Process。 直到最近處理一起Deadlock案例,才又長了見識。一個處理流水序號的Stored Procedure,讀取與更新對象只限同一Table,並不構成井底之蛙心中的Deadlock成立要件: 兩個鎖定對象、相反的讀取/更新順序,但Deadlock卻硬生生地發生了...
【茶包射手日記】SqlDataReader讀取FOR XML結果發生字元截斷
一段使用很久的程式今天忽然出錯,追查原因,是一段古早寫的 FOR XML 查詢出了問題。 程式用SqlCommand執行"SELECT ... FROM ... FOR XML RAW('Boo’)”,最近因資料異動,結果傳回超長的字串,透過SqlDataReader讀取時,只得到最前端的2,033個字元,XML內容被不正常截斷。 微軟有一篇KB310378 The XML data row is truncated at 2,033 characters when you use...
SQL 2008 TVP資料匯入之火力展示
切入主題前,先感謝網友小言在 留言 中分享了SQL 2008 TVP(Table Value Parameter,資料表值參數),一個我差點錯過的好物。 過去遇到要從程式端塞大量資料到資料庫的場合,我慣用的 伎倆 手法不外乎產生INSERT Script與BULK INSERT這兩招,坦白說都挺麻煩的,逃不掉將記憶體中DataTable物件轉換為Script或CSV Text的過程,而既然有 Object -> Text的需求,就免不了得針對不同型別寫邏輯。如果能直接把DataTable轉成資料庫端的Table...
Posted 26 May 2011 01:01 AMJeffrey | 6 comment(s) 16,319
Filed under: ,
SQL與ORACLE處理IsolationLevel.Serializable的行為差異
接觸ORACLE之前,玩過好一陣子的SQL,對Serializable 隔離等級 的認知是: 在隔離範圍內,所有讀取資料的動作都會產生鎖定,將資料保護起來避免外界更動 雖然Serializable隔離等級的代價高昂,對效能殺傷力極大應盡量避免,但因其執行邏輯簡單不易出錯,還是會有其適用時機。 以下是在SQL上實現Serializable隔離的示範: 使用Visual Studio逐行偵錯功能,在兩次讀取間設定中斷點,中斷時用SSMS試圖更動同一筆資料,就可發現UPDATE指令會擋住,要等到.NET程式完成或放棄Transaction後才會繼續執行...
Posted 27 January 2011 02:30 PMJeffrey | with no comments 6,525
Filed under: , ,
【茶包射手日記】不限條件選項之SQL組裝與資料庫OR運算特性驗證
在設計查詢介面時,下拉式選單是很常見的條件選取方式,而往往我們都會再加上一個"不限條件"選項,允許使用者不限制條件,列出所有項頁。舉例來說: 在設定查詢地區的下拉選單(例如: ddlArea),除了列出基隆市、台北市、台北縣、桃園縣...等各縣市Option外,常會再多一個"所有地區"選項,將Option Value設定='*',選取時表示不限定地區。在Server端,便要將這些篩選條件轉為SQL指令,如何將'*'視為不限地區...
觀察LINQ to SQL DataContext的連線開啟時機
昨天的文章 發表後,有兩位網友提到了DataContext是否要加using的議題。 我接觸LINQ to SQL是由Scott Gu的 這幾篇文章 開始入門的,在他的範例中沒有特別提到using,我也自始就忽略DataContext有實做IDispose這件事。雖然用using包住絕對有益無害(只要小心using中間過程如將DataContext傳到外部,要留意using結束後外部就不可再繼續叫用),但我倒認為DataContext裡的Connection應該不是一new DataContext就建立一條連線不放...
Connection Pooling之SqlDataReader.Close()測試
早上貼了 OracleConnection Pooling觀察文 後,引發另一個疑問: 那麼沒呼叫SqlDataReader.Close()也會有相同問題嗎? 程式經過修改,就做出了SQL版: public static void ShowSessionCount( string tag) { using (SqlConnection cn = new SqlConnection(cnStrMonitor)) { cn.Open(); SqlCommand cmd = new SqlCommand...
Posted 12 August 2009 12:37 PMJeffrey | 1 comment(s) 6,972
Filed under: ,

搜尋

Go

<March 2017>
SunMonTueWedThuFriSat
2627281234
567891011
12131415161718
19202122232425
2627282930311
2345678
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

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

文章典藏
其他功能

這個部落格


Syndication