2017-08-24 117 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)) 
相关问题