轉到頭都暈了的資料型態轉換!

這天,為了讓SQL與程式的功能作區分,畢竟資料庫負責處理資料,而程式是負責運算,為了讓雙方回歸到基本的運作模式,因此嘗試著重新編譯程式,卻發現之前資料庫的語法編譯之後雖然造成程式效能不彰,但卻讓程式簡單的幾句就達到我要的結果(簡單的說..就是資料庫我讓他進行不少的運算,最後再將接近結果的資料表丟給程式做最後的運算跟寫入資料庫。)

仔細想想,乾脆就都用資料庫就好啦(其實是辦的到的!)但這樣跟原本設定要給USER隨時上傳資料的意義就消失了。(反正我是程式新手..就用不同的狀況讓我更瞭解C#語法吧!)

言歸正傳,這次遇到的問題是當我從資料庫中提取一出Decimal的資料,但轉入到程式中出現了以下錯誤訊息:將字串轉換為DataTime或是需要的型別是Int32…與輸入的字串格式不正確…“,大冒險就開始了,瘋狂的查詢與測試後(就是要用程式解決啦!!)不過還是沒解決資料載入時的資料型態問題>”<

例如:

DB Data1 : 60.000000 à 60

DB Data2 : 22.000000 à 22

從資料庫取出到DataTable中變成字串,簡單看起來應該是我的資料來源被當成String,但是我要他是Int32

因此我做了轉成整數的動作

String ABC = 123.000;

int PHAMTF = new int();

PHAMTF = int.Parse(PHAMT);

但是,還是出現錯誤訊息需要的型別是Int32”,我想主要的原因應該是我的資料是有小數點的,翻閱文件後,我將語法改為:

首先先增加using System.Globalization 命名空間

System.Globalization 命名空間 (Namespace) 包含定義文化特性相關資訊的類別,包括語言、國家/地區、使用中的曆法、日期、貨幣和數字格式模式,以及字串的排序順序。

 

String ABC = 123.000;

int PHAMTF = new int();

PHAMTF = int.Parse(PHAMT, NumberStyles.AllowDecimalPoint);

輸出結果:123

 

詳細說明請參閱TechNet

Int32.Parse 方法 (String, NumberStyles)

http://msdn.microsoft.com/zh-tw/library/c09yxbyt.aspx

Convert 類別(將基底資料型別轉換為其他基底資料型別。)

http://msdn.microsoft.com/zh-tw/library/system.convert(v=VS.80).aspx

結果就只取出整數出來,當然程式就跑過啦!,但是萬一要是哪天我的資料來源值是真的要用到Decimal的時候…..我該怎麼辦咧!!

 

PS:改寫途中,其中一度想放棄,乾脆用資料庫語法CAST CONVERT (Transact-SQL)來直接修正欄位值,將欄位值直接改成Int ,這樣我接資料就沒問題啦……

---範例語法(複製後貼上SSMS執行即可)----

DECLARE @myval decimal (5, 2)

SET @myval = 193.57

SELECT CAST(@myval AS Int) AS Myval

-- Or, using CONVERT

SELECT CONVERT(int, @myval) AS Myval

改天在來好好寫一篇關於CAST CONVERT (Transact-SQL)

詳細說明請參閱TechNethttp://msdn.microsoft.com/zh-tw/library/ms187928.aspx

 

後記:仔細想想,應該是我對於程式中,資料的來源、承接、型態、結構、方法等..所有東西都不熟悉所導致的吧@@,以致於我根本不知道要修正哪裡的錯誤來解決問題都是用猜的跟用矇的……

炎龍牙 發表在 痞客邦 PIXNET 留言(0) 人氣()