2009年11月17日 星期二

C# 的 Decimal 小數點很麻煩...

最近在算成績時發現,float 真的是不能拿來算成績,不只是不適合算錢,連滿分只有100分的成績也不能算,會算出一堆誤差,花了一堆時間查了半天終於發現有個叫「decimal」型態,有效位數非常大,專用在財務方面的資料型態,decimal 捨入計算誤差非常非常少,後來就全面使用 decimal 來算成績,可是又發現計算結果總是有「.00」出現,就算計算結果是整數,還是有那個00...要拿掉非常麻煩...,又搞了半天,終於發現終極解法,就是運算、儲存時全部用 decimal ,但是要輸出到報表就全部轉型成 float、double,雖然還是有點麻煩,不過算是較簡單的解法了。float、double 不適合運算,但是運算結果輸出去到是很適合,因為成績的圍範就滿分100,最多小數到2位,跟本不會超出 float 的圍範...吧....

我的目得只是要計算結果不能有誤差,但是結果的尾數是0的要去掉...就這樣..

2009年11月9日 星期一

Postgresql Changing a Column's Data Type

Changing a Column's Data Type

To convert a column to a different data type, use a command like:

ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);

This will succeed only if each existing entry in the column can be converted to the new type by an implicit cast. If a more complex conversion is needed, you can add a USING clause that specifies how to compute the new values from the old.

PostgreSQL will attempt to convert the column's default value (if any) to the new type, as well as any constraints that involve the column. But these conversions might fail, or might produce surprising results. It's often best to drop any constraints on the column before altering its type, and then add back suitably modified constraints afterwards.

2009年9月16日 星期三

.NET 如何加密一字串,只讓執行加密的電腦才能解密。

就這樣:
ProtectedData 是 .NET 提供的加密類別,透過此類別加密的資料,只要執行加密的電腦才能解密。

下列程式碼所用到的 System.Security 組件要自行加入參考中。

public static string Protected(string password)

{

if (string.IsNullOrEmpty(password)) return string.Empty;

byte[] plain = Encoding.UTF8.GetBytes(password);

string key = "key";

byte[] cipher = ProtectedData.Protect(plain,

Encoding.UTF8.GetBytes(key),

DataProtectionScope.CurrentUser);

return Convert.ToBase64String(cipher);

}

public static string UnProtected(string base64String)

{

if (string.IsNullOrEmpty(base64String)) return string.Empty;

string key = "key";

byte[] cipher = Convert.FromBase64String(base64String);

byte[] plain = ProtectedData.Unprotect(cipher,

Encoding.UTF8.GetBytes(key),

DataProtectionScope.CurrentUser);

return Encoding.UTF8.GetString(plain);

}


2009年9月10日 星期四

在 Windows 7 上安裝 BootCamp 2.1 (x64) 的方法

我的是 MacBook,一般的 Mac 不知道適用嗎...

1.先把語言改成英文的。
2.執行 BootCamp 2.1 升級程式。

無言的第三行...

2009年9月4日 星期五

讀取 Postgresql 資料 Schema 方法

查詢主機上有哪些資料庫:
SELECT datname FROM pg_database

查詢資料庫有哪些資料表:
SELECT * FROM information_schema.tables

查詢資料庫有哪些資料欄位:
SELECT * FROM information_schema.columns

查詢資料庫的大小:
select pg_database_size('ischool_junior_cgjh_hc')

2009年9月3日 星期四

重設 Postgresql 的 Sequence 方法

這個方法是將 Sequence 設成使用此 Sequence 的資料表 id 最大值。

SELECT setval('dal_log_id_seq', max(id)) FROM student;

2009年9月1日 星期二

使用 Sandcastle Help File Builder 製作 VS.NET 的 HELP 文件

http://itgroup.blueshop.com.tw/jeff377/blog?n=convew&i=3777

2009年8月11日 星期二

在 Postgresql 上為已有資料的資料表增加自動編號欄位方法

通常為新資料表加上自動編號欄位沒啥問題,但是如果是一個已存在的資料表,而且裡面還有一堆資料了,這時就會比較麻煩了,如果直接加自動編號欄沒有問題,但是已存在的資料不會有自動編號,這時就需要一些指令來為已存在的資料填上自動編號。

這個例子是 student 資料表,此資料表是已存在的,而且裡面有成千上萬的資料了…

第一步:新增欄位,但是 SET NOT Null 先不要設。
ALTER TABLE student ADD COLUMN id integer;
ALTER TABLE student ALTER COLUMN id SET STORAGE PLAIN;
ALTER TABLE student ALTER COLUMN id SET DEFAULT nextval('student_id_seq'::regclass);

第二步:為已存在的資料填上自動編號。
UPDATE student set id=nextval('student_id_seq'::regclass);

第三步:執行下列 SET NOT Null 的指令:
ALTER TABLE student ALTER COLUMN id SET NOT NULL;

基本上就是:
1.建立 student_id_seq Sequence,指令我就不寫了,Google 就查的到。
2.新增準備當自動編號的欄位,預設值當然就是剛剛建立的 Sequence。
3.更新自動編號欄,使已存在的資料填上「自動編號」。
4.將自動編號欄設成 Not Null(這一步是選擇性的)。

2009年8月1日 星期六

在 Mac 上安裝實體 Windows 系統的感覺...

我目前雖然是 Mac 的使用者,但其實我並沒有很全心使用 Mac,因為我的工作也大部是在 Windows 上,雖然使用了 MacBook,還是常常需要 Windows,所以也不得以要安裝個 Windows。我原本使用 Mac 上的 VMWare 來裝 Windows ,但是總覺得效能不好…不過這其實是心裡作用,因為其實效能不錯。我實際利用 Mac上的「Boot Camp 輔助程式」安裝了一個實體的 Windows XP,運作的結果,只有在「圖形」效能上有很大的差別,其他的部份,我覺得都還沒啥差別。

至於 Boot Camp 的使用方式,我因為還不會從 Mac 上抓圖,所以…下次再說吧。

2009年4月10日 星期五

Microsoft 實在太人道了

我實在是無言,Microsoft 怎麼有時後東西只作一半而已,在 TFS 上刪除一個工作項目還這麼麻煩,要搞那麼一大圈,要安裝什麼 Power Tools,然後又要用什麼 tfpt 指令,有夠點點點的...

tfpt destroywi /server:TFS主機名稱 /workitemid:工作項目編號

關於 TFS 授權

研究了好一段時間,終於慢慢了解 TFS 的授權,主要是分成 Server 授權與 Client 授權。

基本上 TFS 需要 Server 授權與 Client(CAL) 授權,如果有下列產品的話基本上就有了 Client 授權(但沒有 Server 授權)。
  • Visual Studio 2008 Team Suite
  • Visual Studio 2008 Team Edition For Software Architects
  • Visual Studio 2008 Team Edition For Software Developers
  • Visual Studio 2008 Team Edition For Software Testers
  • Visual Studio 2008 Team Edition For Database Professionals

如果不是上述版本就沒有 CAL,例如第三方的 Teamprise 產品,意思是就算有 TFS Server 也不能用,要另外買 CAL 才能連。

特別說明買 MSDN 教育版的 Team Edition for xxxxx 版本只有五人授權,想要超過五人的,就必需另外買正式版的的 TFS Server 授權。(MSDN 內附五人版的 TFS Server)

2009年3月28日 星期六

TFS 強制解除簽出

當有人簽出原始碼後,確無法簽入,例如有人亂搞簽出原始碼後,把電腦搞掛了,無法簽入時就會用到...還有一種就是胡亂簽出然後搞別人有些程式無法修改,硬幹時可以用…

指令名稱:tf undo /workspace:<簽出人工作區名稱>;<工作區雍有人> /server:<主機名稱> <檔案路徑>
指令路徑C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE (適用 Visual Studio 2008)

參數說明:
/workspace
簽出人的工作區資訊,範例中的 wangjf 是工作區名稱,tfserver\wangjf 是使用者名稱

/server
主機名稱

例:
tf undo /workspace:wangjf;tfserver\wangjf $/ischoolteam/BaseFramework/Framework/AccessControl/UI/FeatureAccessControl.cs

範:
tf
undo
/workspace:changkh-pc;tfserver\kunhsiang
"$/ischoolteam/...../JHSchool.Behavior.csproj.vspscc"

2009年2月25日 星期三

刪除 TFS 上的工作項目

TFS 設計整個真的是有問題,工作項目不小心加錯了不能刪。搞屁呀。
上網找文章也找不到刪除的方法,只好到 TfsWorkItemTracking 資料庫的 WorkItemsLastest 資料表直接刪,畫面上是不會出現了,但是實際上有沒有垃圾存留在資料庫中,我也不知道。

2009年1月8日 星期四

TFS 真不是人灌的...

1.安裝好 IIS 6 之後要確定 FontPage Extension 沒有安裝,因為跟 SharePoint Services 相衝。
2.安裝好 SQL Server 2005 後,大部份沒有啥問題,只是記得該裝的要裝,例如 SP2。
3.安裝好 SharePoint Service 後,要記得確認網站是否能正確開出來,不然裝 TFS 一定掛。
4.安裝好 TFS 後...就看造化了... = =''