發表文章

目前顯示的是 3月, 2011的文章

NuGet 簡化.NET專案中引用第三方函式庫

網路上有許多好用的.NET第三方函式庫,不過在使用這些函式庫時,一般都需要一些安裝的步驟才能正常地使用。有時還需要再去取得它所引用的其它函式庫。這樣的步驟是相當繁鎖的。為了簡化這樣的安裝步驟,我們可以使用 NuGet 這個套件來協助。

SQL 2008不支援Backup的Truncat_Only選項

以前要將資料庫的交易記錄檔截斷並縮小的話,都是使用以下的指令: -- 備份資料庫,並壓縮log檔 use TestDB BACKUP LOG TestDB WITH TRUNCATE_ONLY DBCC SHRINKFILE ('TestDB_Log', 2) GO 可是在換到SQL 2008之後,執行上面的指令會出現以下的錯誤訊息: 'TRUNCATE_ONLY' 不是可辨識的 BACKUP 選項 看來是SQL 2008不再支援TRUNCATE_ONLY的選項了。 那要截斷交易記錄檔的話,要如何進行呢? 可以參考這篇文章 。 主要的原理是在將資料庫的備份模式切換到簡易模式(SIMPLE)時,它就會自動地截斷交易記錄檔。但就算是載斷了交易記錄檔,原本log檔的大小還是不會改變,所以要再加上使用DBCC SHRINKFILE()來縮小log檔。 完整的指令如下: use TestDB -- 備份資料庫,並壓縮log檔 /* 當資料庫使用簡單復原模式時,便會自動截斷交易記錄。 如果您必須從資料庫中移除記錄備份鏈結,請切換到簡單復原模式。 */ --01 將資料庫 Northwind 切換為「簡單復原模式」,便會自動截斷交易記錄。 ALTER DATABASE TestDB SET RECOVERY SIMPLE WITH NO_WAIT GO DBCC SHRINKFILE ('TestDB_Log', 2) GO --02 若決定要備份交易記錄檔(*.ldf),再將資料庫 Northwind 切換回「完整復原模式」 ALTER DATABASE TestDB SET RECOVERY FULL WITH NO_WAIT GO

將SQL2005的作業排程昇級到SQL2008時發生錯誤

最近試著將SQL 2005的作業排程利用產生SQL指令的方式要昇級到SQL 2008時,出現以下的錯誤訊息: 訊息 515,層級 16,狀態 2,程序 sp_add_job,行 137 無法插入 NULL 值到資料行 'owner_sid',資料表 'msdb.dbo.sysjobs'; 資料行不得有 Null。INSERT 失敗。 陳述式已經結束。 查了一下,在MSDN中好像有說這是 因為SQL 2008本身沒有建sa的問題 。最好的方式是要昇級到SQL 2008 SP1

讀取另一個Process的stdout及stderr

有時候我們在程式中會再使用System.Diagnostic.Process來去執行另一個程式,而且也可能會有需要去接收這個被我們執行的程式的輸出資訊,不論是正式的輸出(來自stdout)或是錯誤資訊的輸出(來自stderr)。 這些相關的技術可以參考: Solving Problems of Monitoring Standard Output and Error Streams of a Running Process

Word 2007 技巧

利用Word自動編號事半功倍,以Word2007為例

QuickSort實作(用C#)

最近跟同事討論到QuickSort這個演算法,因為網路上找到的範例好像都有些問題,就自已試著實作一次來瞭解一下QuickSort的原理。 正好手邊有一本「 演算法之道:讓你學不會演算法都難 」裏面有講到這個排序演算法,實作一下,還真的可行。 以下是實作的程式碼: public class QuickSort { public static void SortCore( ref int [] src, int start, int len) { if (start < len) { DumpArray( "Start sort" , src); int pivotPos = Partition( ref src, start, len); SortCore( ref src, start, pivotPos); // 對左邊的資料排序 SortCore( ref src, pivotPos + 1, len); // 對右邊的資料排序 } } protected static int Partition( ref int [] src, int start, int len) { string msg = string .Format( "Partition From {0} to {1}" , start, len); if (start >= len) return start; // 不用排序 int pivotPos = start; int pivotValue = src[pivotPos]; int i = pivotPos;

Server 2008 R2 x64 上的IIS 7無法執行.NET Framework 4.0的ASP.NET網站

圖片
在設定好伺服器,且將網站部署到伺服器上後,發現還是無法正常執行網站。會出現如下的錯誤: 一開始以為是IIS 7的設定問題,可是如果是用單純的網頁來測試的話,又可以正常地執行。所以就仔細看了一下錯誤的訊息。其中「最有可的原因」中的第一點是說可是ASP.NET未安裝完全。於是就到網路上查詢相關的資訊。我查詢的方式是直接查詢錯誤訊息:•使用 Managed 處理常式,卻未安裝 ASP.NET,或安裝不完整。 查到一篇相關的文章,正好其中提到 如何確認你的IIS是否可以支援.NET 4.0 。原來是要到「處理常式對應」中確認是否.aspx的檔案有.NET 4.0的對應設定。 像這樣就是沒有對應的處理函式: 解決的方式就是重新安裝.NET 4.0的套件。安裝完成後,會看到出現正確的對應。

讓IIS 7.0支援VS2010的網站發行功能

圖片
在VS2010中的網站發行功能有了新的發行方式。只要在網站的專案中按下右鍵,選擇「發行」,且只要要部署的伺服器有設定好相關的設定,就可以很簡單地完成網站的部署了。 不過,伺服器要如何設定,才能支援VS2010的網站發行功能呢? 首先,在你的伺服器中,要先安裝「管理服務」。安裝的方式: 1. 先開啟伺服器管理員,再到「角色」中去「新增角色服務」 安裝完成後,可以到「IIS管理員」中點選左邊樹狀圖的「你的電腦名稱」,並在右邊的頁面中下方看到「管理服務」的功能圖示 2. 安裝 WebDeploy 套件 3. 確認以下兩種服務都已啟動: 有了以上兩種服務,就可以 使用VS2010的網站發行功能來發行你的網站 了。

eclipse如何停止除錯

圖片
最近開始用eclipse學習寫android程式。在除錯時,一直找不到如何停止除錯的方式。每次都是要讓它一直執行,直到畫面出現後,再到android的模擬器上終止程式。 後來發現,原來要在eclipse中停止除錯的話,是要在「debug」模式下,先在左上方的debug視窗中,找到樹狀結構中的最上層那個,再點選它,之後再按下右方中間的停止鈕,這樣就可以立即停止除錯了。

DOS Batch指令檔中如何記錄log資訊

最近在用DOS的batch指令檔來批次編譯專案。執行程式時如果有錯誤大部份都會傳回非零值的錯誤代碼,要取用這個錯誤代碼的話,在DOS Batch中可以用如下的指令: IF %ERRORLEVEL% 1 GOTO xxxx 或是 IF %ERRORLEVEL% NEQ 0 GOTO xxxx 使用上述的方式就可以來控制執行的流程。只是除了控制執行的流程外,我們還希望能將一些資訊記錄下來。在DOS的Batch指令檔中,可以用ECHO > file.txt的方式來記錄資訊。 例如: @ECHO Build Failed > log.txt 上面的指令中,@ECHO是說不要將這段顯示在DOS命令列視窗中。並且將訊息"Build Failed"寫入到log.txt檔案中。不過,其中使用的是「>」,它的作用是會覆寫檔案的內容。如果想要將文字附加到log檔中的話,可以改用「>>」。

利用改寫要執行的Target的方式讓後來的人可以改變流程

最近在使用MSBuild的專案批次建置專案時,發現有些專案中,它會需要一些特別的流程。例如在引用的DLL中,大部份都是需要xxx.DLL,但可能有某個特別的專案,就是要引用到其它名稱的DLL。這樣的特例可能就無法寫在固定的流程中給所有要編譯的專案來執行了。 那要怎樣才能讓每個專案在要進行編譯前,可以準備好自己所需要參考到的檔案呢(這裏說檔案是因為不一定就是DLL,可能是其它種類的檔案) 目前我的作法就是在既定的編譯流程中,加入一個叫作SlnBeforeBuild的target。如果要編譯的專案沒有自已要特別執行的作業的話,就不用改寫這個target。 例如我有個編譯用的MyBuild.proj,在MyBuild.proj會去引入DefaultSlnBeforeBuild.proj。而DefaultSlnBeforeBuild.proj的程式碼大致上如下: < project xmlns ="http://schemas.microsoft.com/developer/msbuild/2003" > < target name ="SlnBeforeBuild" > < message text ="Default sln BeforeBuild" > </ message ></ target > </ project > 在DefaultSlnBeforeBuild.proj中定義了一個叫作SlnBeforeBuild的target。這個Target在MyBuild.proj時會被執行到。 一般的狀況下都不用改寫SlnBeforeBuild這個target。但如果有需要時,可以在每個專案的proj中,在它引用了MyBuild.proj後,再寫一段自已的SlnBeforeBuild的target。這樣就可以達到改寫的功能,當MyBuild.proj中要呼叫到SlnBeforeBuild這個target時,就會改執行新改寫的內容了。 會有這樣的結果,我猜應該是MSBuild在執行時,所引入的專案中的任何資料,都是以最後的為主。也就是後面的會蓋掉前面的。