2013-03-19 112 views
1

這是我第一次嘗試在vb.net編寫一個oop程序。該程序的基本思想是使用Excel工作表作爲數據源,然後更新mysql數據庫。爲了實踐OOP的原則,我創建了一個名爲motorbike和financeExample的類型。字符串VB.Net類型轉換

我使用下面的連接字符串,它的數據作爲文本僅只是因爲似乎有一個問題閱讀1198

Dim xcelConnString As String = 
    "Provider=Microsoft.Jet.OLEDB.4.0;" _ 
    & "Data Source=R:\newBikeUpdates\motorcyclesLatest.xls;" _ 
    & "Extended Properties=""Excel 8.0; IMEX=1""" 

所以我在讀值模型,然後將其分配給摩托車和financeExample對象的屬性。

隨着vbscript的接地,它非常快速地變得非常清楚,數據類型並不像我第一次想到的那麼容易。所以,我因此寫了將在一個屬性分配一個值的點返回正確類型的函數:

motorcycle.category = checkValue(xcelDA("Category")) ' String expected 
motorcycle.weight = checkValue(xcelDA("Weight")) 'String passed and Integer should be returned. 

因此,這裏的功能:

Function checkValue(ByVal v As Object) 
    Dim ret 
    If Not IsDBNull(v) Then 
     If Double.TryParse(v, ret) Then 
      Debug.WriteLine("v is Double") 
      Return ret 
     ElseIf Integer.TryParse(v, ret) Then 
      Debug.WriteLine("v is an Integer") 
      Return ret 
     ElseIf v.GetType Is GetType(String) Then 
      Debug.WriteLine("v is a string") 
      Return CStr(v) 
     Else ' Presumption of string type 
      Debug.WriteLine("v is Other") 
      Return v 
     End If 
    Else 
     Debug.WriteLine("v is DBNull") 
     ret = "" 
     Return ret 
    End If 
End Function 

和字符串元素工程類別和字符串被返回。但是,當它分配權重值時,我得到一串「417」傳入,但double.tryparse(v,ret)或integer.tryparse(v,ret)元素都不起作用。當使用debug作爲v.getType()時,VS2010報告v爲字符串/ system.string。我甚至試過在integer.tryParse(「417」,ret)中傳遞調試,並且這可以工作,但由於某種原因它不會與v參數一起使用。

我也試過integer.tryParse(v.toString,ret),這也不起作用。

所以任何人可以點我在正確的方向請如何克服這個問題,因爲CINT似乎不工作(VBscript的接地,對不起!)

許多在此先感謝! 格雷厄姆

回答

0

好吧,這是公平的說,我的遺產在vbscript在這個問題上閃閃發光。

在運行並調試代碼並檢查v的值時,我認爲「417」被傳入,我注意到實際傳入的值是「417」,並有額外的空間。

當然,在vbscript中,我非常確定trim會自動發生。所以在調用函數的地方調整字符串實際上會返回一個雙倍的預期值。

不要笑,我意識到我是一個木板!

如果你看的感謝, 格雷厄姆

+0

好,我正要發表評論說:「正常工作對我!」我基本上通過「451」作爲參數checkValue。 – Constanta 2013-03-19 12:16:49

+0

感謝您的關注。我仍然遇到類型轉換問題。有沒有關於這個問題的建議,以及如何最好地接近它。 – EvilKermitSaurus 2013-03-19 13:14:12

+0

如果你有更多類似的問題,請張貼一些代碼 – Constanta 2013-03-19 14:46:19