将空值分配给SQL中的十进制字段

时间:2015-07-31 07:59:30

标签: sql sql-server vb.net visual-studio-2008 sql-server-2014

我想在 SQL 2014 中具有数据类型null value的字段中分配decimal。我尝试使用这些代码,但我没有得到我想要的方式(假设存在其他字段名和值。)

query = "INSERT INTO DBNAME.TLTRPRGP(DECIMALVAL) VALUES(@DECIMALVAL)"
params = New String() {"BLGSCD"}
values = New String() {Nothing}

SaveUpdateDelete(query, params, values)


query = "INSERT INTO DBNAME.TLTRPRGP(DECIMALVAL) VALUES(@DECIMALVAL)"
params = New String() {"BLGSCD"}
values = New String() {DbNull.Value}

SaveUpdateDelete(query, params, values)


query = "INSERT INTO DBNAME.TLTRPRGP(DECIMALVAL) VALUES(@DECIMALVAL)"
params = New String() {"BLGSCD"}
values = New String() {VbNull}

SaveUpdateDelete(query, params, values)


Private Sub SaveUpdateDelete(ByVal sql As String, ByVal parameters() As String, ByVal Values() As String)
    If con.State = ConnectionState.Open Then
        con.Close()
    End If
    con.Open()

    Dim command As New SqlCommand
    command = New SqlCommand(sql, con)

    For i = 0 To parameters.Count - 1
        command.Parameters.AddWithValue("@" & parameters(i).ToString, Values(i))
    Next
    command.CommandText = sql
    command.ExecuteNonQuery()

    con.Close()
End Sub

第一个代码returns 0。第二个返回语法错误,表示"Value System.DbNull.Value cannot be converted to String"。第三个代码returns 1。所有这些代码都无法返回正确的值,即假设为NULLEMPTY。还有什么可以尝试的?

1 个答案:

答案 0 :(得分:0)

问题在于值的数据类型:您将其约束为字符串,但有些值无法转换为字符串(例如:DBNull.Value)。

解决方案是使用通用object作为传递给函数SaveUpdateDelete的参数的数据类型。