Arz*_*eff 4 sql vb.net sql-server floating-point nan
我需要帮助在SQL Server 2012中将浮点列中的NaN值插入为0.
我插入数据库的数据来自一个活动目录,有时它生成了NaN值,但我的数据库列被定义为一个浮点数,因为我想从数据库中获取这些值并进行一些计算.
Dim value1 As Double
sql = "INSERT INTO usb_compliance (Date,atc,value1,) VALUES ('" & Now.Date & "','CMB','" & value1 &"' )"
Run Code Online (Sandbox Code Playgroud)
首先,永远不要连接字符串来创建sql语句.
这是一种安全风险,因为它是Sql注入攻击的一扇门.
请改用参数化查询.
其次,我建议使用null表示NaN值,因为0.0是一个有效的浮点值,NaN代表Not A Number,基本上是一个不可知的值,就像null在Sql server中一样.
话虽如此,你可以简单地在你的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
Run Code Online (Sandbox Code Playgroud)
并像这样称呼它:
InsertValues("CMB", value1) '' To use the Now.Date
InsertValues("ERT", value1, DateTime.Now.AddDays(3)) '' to insert the date 3 days from now
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9457 次 |
| 最近记录: |