我厌倦了检查 DBNULL,所以我为此编写了一个函数。根据您使用的数据库类型,它确实取决于,但为了提高效率,您可能希望使用 StringBuilder 类而不是字符串连接。
如果您使用参数化查询,请参阅此link,了解在 Access 中使用参数化查询的基本介绍,您可以直接插入特殊的 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),因为您没有提供 db 信息: