發表文章

用VirtualSVN Server架Subversion,用MSBuild取出程式碼

最近想放棄VSS,改用SubVersion。所以就找了一個專案來試一下。要用SubVersion來管理程式碼是蠻簡單的。如果你是用Visual Studio的話,可以使用Ankh。它可以整合到Visual Studio中並使用SubVrsion來管理程式碼。 至於SubVersion的Server端,最方便使用的應該就是 VirtualSVN Server 了吧。只要下載並安裝就可以了。 如果要使用MSBuild來進行專案建置的話,原本的MSBuild並不支援SubVersion,其實就連VSS它也不支援。這些都必須取得第三方套件來用,才能由這些程式碼管理工具中取得程式碼來進行編譯。所以可以去取得 MSBuildTasks 套件來安裝使用。 老實說在MSBuildTasks中的說明文件,它只有說明這些套件的一些屬性及方法。完全沒有範例。實在很難體會如何去使用它來透過SubVersion Server下載程式碼。所以就到網路上找了一些資料,可是 這篇文件中的MSBuild專案檔好像也是不行 。因為它沒有指定Svn.exe的路徑,可能是因為它不是用VirtualSVN Server吧。 後來才發現, 原來要指定這個路徑才行 。改了一下果然就可以下載了。只是一開始以為要用SvnUpdate這個指令,因為我只是想更新程式碼,而不是想要簽出。但後來發現要取得程式碼的話,還是要用 SvnCheckout才行。 MSBuild xml檔如下: < Project xmlns ="http://schemas.microsoft.com/developer/msbuild/2003" > <!-- Version : 1.0 Revision: --> < PropertyGroup > < RootDir > ./ </ RootDir > < SlnName > TX4 </ SlnName > < ExtProgramPath > D:\Ext Programs\ </ ExtProgramPath > < SvnVersion ></ SvnVersion > ...

加速開啟SQL Management Studio的速度

在網路上看到有人說可以 加快開啟SQL Management Studio速度 的方式。試了一下還真的可以很快地開啟SQL Managment Studio。它的方式是在hosts檔案中加入一行: 127.0.0.1  crl.microsoft.com 看來就是讓有需要查詢crl.microsoft.com的程式,直接就連回本機了。 只是 查詢crl.microsoft.com的用意為何 呢? One issue that can cause this problem is that if the server does not have access to the internet, then the .NET framework can't access the crl.microsoft.com website to verify that the digital signatures used to sign the binaries for managed applications are valid.  看來是為了要驗証數位簽章的正確性。如果你確定是正確的,那就不用去檢查了吧。或是你根本就無法查詢crl.microsoft.com的話,那也不用查了。可省下開啟的時間。

實作C# Form的登出再重新登入功能

一般在開發應用程式時都會在執行程式時先顯示一個對話視窗要求使用者輸入登入資訊。正確後再登入到主畫面中。 在主畫面中也會登供一個登出的功能,以便讓使用者重新登入。看是用其它的使用者帳號登入或是登入到不同的環境中。 不過在C#中好像沒有辦法直接支援這種登出登入模式。所以必須自行實作。目前我實作的方式就是在主視窗中宣告一個公用變數來記錄是否要進行重新登入,並接收FormClosiing事件詢問使用者是否要重新登入。 程式碼如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace TestFormLogout { public partial class Form1 : Form { /// <summary> /// 記錄是否要進行重新登入 /// </summary> public bool isReLogin = false ; public Form1() { InitializeComponent(); } private void btnLogout_Click( object sender, EventArgs e) { this .Close(); } private void OnClosing( object sender, FormClosingEventArgs e) { if (MessageBox.Show( "是否重新登入?" , "重新登入" , MessageBoxButtons.YesNo) == DialogResult.Yes)...

使用T4範本產生器讀取資料庫時指定所要使用的SMO版本

圖片
在使用T4範本產生器讀取資料庫的資訊時,一般可能都會用如下的引用方式: <#@ template language="C#" debug="True" hostspecific="True" encoding="0"#> <#@ output extension=".cs" #> <#@ assembly name="System.Data" #> <#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #> <#@ assembly name="Microsoft.SqlServer.Smo" #> <#@ assembly name="Microsoft.SqlServer.Management.Sdk.Sfc" #> <#@ assembly name="System.Xml" #> <#@ import namespace="System.IO" #> <#@ import namespace="System.Text" #> <#@ import namespace="System.Data.SqlClient" #> <#@ import namespace="Microsoft.SqlServer.Management.Smo" #> <#@ import namespace="Microsoft.SqlServer.Management.Common" #> 其中在引用有關 M icrosoft® SQL Server® 2008 R2 共用管理物件 時,大部份都直接寫Assembly的名稱。但是如果您的開發環境中安裝了兩種以上的SQL Server版本時,這時會取用註冊在GAC中的哪一種版本,可能就會取決於您目前所使用的Visu...

將資料表中某欄位值串接成字串

圖片
今天在逛網站時,突然看到有人在介紹SQL Server新的T-SQL指令PIVOT。大致上就瞭解及試了一下這種PIVOT的用途。在試過語法後,發現要使用PIVOT語法時,必須明確地知道所需要的橫向欄位有多少。 例如: -- Pivot table with one row and five columns SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days, [0], [1], [2], [3], [4] FROM (SELECT DaysToManufacture, StandardCost     FROM Production.Product) AS SourceTable PIVOT ( AVG(StandardCost) FOR DaysToManufacture IN ([0], [1], [2], [3], [4]) ) AS PivotTable; 這個來 自MSDN上的PIVOT範例 。執行結果如下: 由上面的範例來看,PIVOT可以將原本是直行的查詢結果,轉換成橫向的查詢結果。不過,這樣的語法使用上就是必須事先知道所要的橫向欄位有哪些。如果一開始不確定PIVOT中要的橫向欄位有哪些的話,那該如何是好。 最好的方式就是這些橫向欄位是可以由另外一份清單來取得。不過,在PIVOT中它無法再支援子查詢的方式,也就是不能寫成: PIVOT ( AVG(StandardCost) FOR DaysToManufacture IN ( select * FROM xxxx ) ) AS PivotTable; 可能的作法就是要自已動態組合SQL指令,再來執行了。執行的方式可以用: execute sp_executesql @SQLCmd 如何組合出動態PIVOT橫向欄位 在網路上找到一篇有關 如何將資料表中的資料組成一組串列 的方式,不過,這篇文章中的組合方式好像有點問題。那篇文章中作者使用到 COALESCE() 這個T-SQL指令。COALESCE()指令的用法是將兩個參數中不為NULL的那個傳回。最後組出來的字串中,第一個字串前面也會多了一個','。所以我就改寫了一下語法,不使用COALESCE()...

C# Controls相關文章

EasyProgressBar

自訂Wordpress右邊日曆小工具樣式

圖片
最近在設定我的Wordpress網站時,找到一個不錯的佈景主題(Theme):Ramiro。套用後大致上的樣式都OK,但就是右邊有設定的「日曆」小工具會超出原本佈景主題所設定的範圍。 當然Wordpress有支援可以在管理介面中去修改這些Theme的樣式。一開始想說是不是在一些控製邊欄的.php檔中。可是找了一下,也沒有找到。去查了一下Wordpress有關Theme製作上,如果要顯示這個日曆的話,好像是要用get_calendar()的函式。可是發現我使用的Theme中並沒有呼叫到這個函式。 後來沒辦法,想說那不然就直接看看網頁的原始程式碼好了。 發現原來在這個區域是屬於「right」所控管的。所以就到這個佈景主題的樣式表中去查詢。發現是有這個ID,但裏面並沒有特別去控制日曆相關的樣式。也就是沒有去設定以下這些ID的樣式: calendar_wrap wp-calendar 我猜想應該是沿用了「right」區的字型造成日曆的顯示超出邊界了。於是就開始動手加入有關上述這兩個ID的樣式表。 最主要的改善方式就是將字型由1.5em改為0.5em。這樣就可以了。 不過,上面這樣看起來有點美中不足的就是整個日曆有點偏右。沒關係,只要再加上margin : -10px。就好了: