将空字符串转换为NULL Double

时间:2017-08-24 21:43:59

标签: sql vb.net

我花了很多时间试图找到这个答案。我认为这很容易,但没有什么是我想要做的具体。所以我希望有人能提供帮助。

我将价值从一个系统带到另一个系统。我有几个字段以字符串形式出现,但它们需要以DOUBLE的形式进入新系统。当存在空字符串时出现问题("")并且它试图将其存储为double。我试过了一切。

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

等...不能让这个工作,我不知道为什么。

所以这是代码:

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

然后当我将其插入我的数据库时,我收到错误,因为字段类型是NUMERIC而我正在尝试插入""

我确实有这个工作:

 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

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

原来这就是答案....感谢Arminius的链接文章让我得到了正确的答案......感谢史蒂夫的时间和帮助!

 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))