我累了检查DBNull的,所以我写了一个函数。根据您使用的数据库的类型,这取决于实际情况,但为了提高效率,您可能需要使用StringBuilder类而不是字符串连接。
如果使用参数化查询看到这个link一个非常基本的介绍了如何使用参数化查询与访问,您将能够直接插入特殊的DBNull值:
Dim myConnection As New OleDbConnection(DBConnection)
Dim Cmd As OleDbCommand = New OleDbCommand()
Cmd.CommandText = "INSERT INTO dbTable (ItemNumber, QuoteNumber, ItemDescription, Details, Price) VALUES (@ITN, @QN, @ITD, @DET, @PR)"
Cmd.Parameters.Add(New OleDbParameter("@ITN", OleDbType.VarChar)).Value = CheckDBNull(ITN)
Cmd.Parameters.Add(New OleDbParameter("@QN", OleDbType.VarChar)).Value = CheckDBNull(QN)
Cmd.Parameters.Add(New OleDbParameter("@ITD", OleDbType.VarChar)).Value = CheckDBNull(ITD)
Cmd.Parameters.Add(New OleDbParameter("@DET", OleDbType.VarChar)).Value = CheckDBNull(DET)
Cmd.Parameters.Add(New OleDbParameter("@PR", OleDbType.VarChar)).Value = CheckDBNull(PR)
DBConnection.Open()
Cmd.ExecuteNonQuery()
这也有利于避免令人讨厌的SQL注入。就像我提到的,取决于数据库使用的是你可能需要使用SqlParameter
& SqlDbType
与OleDbParameter
& OleDbType
但CheckDBNull功能可以是简单的,如下:
Private Function CheckDBNull(ByVal s As String) As Object
If Not s Is Nothing And s.Length > 0 Then
Return s
Else
Return System.DBNull.Value
End If
End Function
我希望这有助于。请注意,这些参数中的一些仅用作示例(myConnection,Cmd,dbTable),因为您没有提供数据库信息: