我花了很多时间试图找到这个答案。我认为这很容易,但没有什么是我想要做的具体。所以我希望有人能提供帮助。
我将价值从一个系统带到另一个系统。我有几个字段以字符串形式出现,但它们需要以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
答案 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))