2017-08-24 82 views
0

我花了大量的時間試圖找到這個答案。我認爲這很容易,但沒有什麼特定於我想要做的。所以我希望有人能幫忙。將空字符串轉換爲NULL雙重

我將價值從一個系統帶到另一個系統。我有幾個字段以字符串形式出現,但他們需要作爲DOUBLE進入新系統。當存在空字符串(「」)並且它試圖將其存儲爲double時,就會出現問題。我嘗試了一切。

dbnull.value 
Double.TryParse 
CDBL() 
Double? 
VAL() 

等...不能得到這個工作,我不知道爲什麼。

所以這裏是代碼:

Dim specvertclr As String = dt23.Rows(0).ItemArray.GetValue(38).ToString() 

然後當我插入該到我的數據庫我得到的錯誤,因爲該字段類型是數字,我想插入「」

我也有這工作:

Dim specvertclr As String 

         If dt23.Rows(0).ItemArray.GetValue(38).ToString() = "" Then 
          specvertclr = CStr(0) 
         Else 
          specvertclr = dt23.Rows(0).ItemArray.GetValue(38).ToString() 
         End If 

但這個問題是它插入一個0值和0是不一樣的NULL。當源數據庫中的字符串爲空時,我希望目標數據庫(SQLCE)中的NUMERIC字段爲EMPTY。

任何幫助?

這是我的嘗試:

Dim specvertclr As Nullable(Of Double) = CType(dt23.Rows(0).ItemArray.GetValue(38).ToString(), Double?) 

,然後我的插件是基本的程序將引發一個錯誤甚至送過來了。我知道這部分是正確的。

Dim cmd2 As SqlCeCommand = conn.CreateCommand() 
          cmd2.CommandText = "Insert into [Attr_Bridge] ([VERTCLR]) VALUES (?)" 
          With cmd2.Parameters 
    .AddWithValue("P1", specvertclr) 
end with 
+0

看看Double.TryParse - https://msdn.microsoft.com/en-us/library/system.double.tryparse( v = vs.110).aspx –

+2

字符串不是數字。 _specvertclr_是一個字符串。您需要使用[可空雙精度變量](https://msdn.microsoft.com/en-us/library/b3h38hb0(v = vs.110).aspx) – Steve

+0

我也嘗試過,並且出現以下錯誤:從字符串「」轉換爲「Double」類型無效。 –

回答

0

你需要將它添加到數據庫中

Dim specvertclr = dt23.Rows(0).ItemArray.GetValue(38).ToString() 
.... 
Dim cmd2 As SqlCeCommand = conn.CreateCommand() 
cmd2.CommandText = "Insert into [Attr_Bridge] ([VERTCLR]) VALUES (@P1)" 
With cmd2.Parameters 
    .Add("@P1", SqlDbType.Float).Value = If(String.IsNullOrEmpty(specvertclr), DBNull.Value, CType(specvertclr, Object)) 
+0

我會用什麼類型的... SqlDbtype.Float?沒有雙重選擇。 –

+0

浮法對雙重有好處 – Steve

+0

不幸的是,這看起來並不像它會起作用......它表示它期待着一個我不提供的參數。 –

0

事實證明,這是答案之前檢查你的字符串的內容....謝謝阿米紐斯爲你鏈接的文章,導致了我以正確的答案...謝謝史蒂夫你的時間和幫助!

Dim specvertclr As String = dt23.Rows(0).ItemArray.GetValue(38).ToString() 

        Dim oerrorspec As Object = System.DBNull.Value 

        If specvertclr <> Nothing Then oerrorspec = specvertclr 

,然後在參數部分我用這個

.Add(New SqlCeParameter("@P41", oerrorspec)) 
相關問題