【问题标题】:Inserting NaN value into a float column将 NaN 值插入浮点列
【发布时间】:2015-09-25 23:19:21
【问题描述】:

我需要帮助在 SQL Server 2012 中将 NaN 值插入浮点列中作为 0。

我插入数据库的数据来自活动目录,有时会生成 NaN 值,但我的数据库列被定义为浮点数,因为我想从数据库中获取这些值并进行一些计算。

Dim value1 As Double 

sql = "INSERT INTO usb_compliance (Date,atc,value1,) VALUES ('" & Now.Date & "','CMB','" & value1 &"' )" 

【问题讨论】:

  • 类似于“当 val = 'NaN' then 0.0 else val end”的情况?
  • 大多数时候它的活动目录会生成数字,但是当它生成 NaN 时,我的 SQL 代码会出错

标签: sql sql-server vb.net floating-point nan


【解决方案1】:

首先,切勿连接字符串来创建 sql 语句。
这是一个安全风险,因为它为Sql injection 攻击打开了大门。
请改用参数化查询。

其次,我建议使用null 来表示NaN 值,因为0.0 是一个有效的浮点值,NaN 代表Not A Number,基本上是一个不可知的值,就像Sql server 中的null .

话虽如此,您可以像这样在 vb.net 中简单地使用条件:

Sub InsertValues(ByVal atc As String, ByVal value1 As Double, ByVal d As DateTime)
    Dim sql As String = "INSERT INTO usb_compliance (Date,atc,value1) VALUES (@Date, @atc,@value1)"
    ' SqlConnection con is defined and set elsewhere
    Dim cmd As SqlCommand = New SqlCommand(sql, con)
    With cmd
        .Connection.Open()
        .CommandType = CommandType.Text
        .Parameters.Add("@Date", SqlDbType.DateTime).Value = d
        .Parameters.Add("@atc", SqlDbType.NVarChar).Value = atc
        .Parameters.Add("@value1", SqlDbType.Float).Value = IIf(Double.IsNaN(value1), DBNull.Value, value1)
        .ExecuteNonQuery()
    End With
End Sub

' overload since optional parameter can't be non-constant DateTime.Now
Sub InsertValues(ByVal atc As String, ByVal value1 As Double)
    InsertValues(atc, value1, DateTime.Now)
End Sub

然后这样称呼它:

InsertValues("CMB", value1) '' To use the Now.Date
InsertValues("ERT", value1, DateTime.Now.AddDays(3)) '' to insert the date 3 days from now

【讨论】:

  • 它说 value1.IsNaN 中的错误,因为 IsNaN 不是“整数”的成员(我已将 value1 分配为整数)我该怎么办?
  • 现在我有了更多的值,例如 VALUES ('" & Now.Date & "','CMB','" & value1 &"' ), ('" & Now.Date & "' ,'ERT','" & value1 &"' ), ('" & Now.Date & "','ERT','" & value1 &"' )
  • 如何在参数化查询中添加它???如果我添加我需要为每个值使用 IFF 还是有任何简单的方法(请帮助我)
  • 你可以把它全部包装在一个函数中,每次都用不同的值调用它。如果它解决了您的问题,请接受答案,以便其他人知道问题已解决。
  • 你能举个例子吗?
猜你喜欢
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 2014-01-22
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多