[2.0] Insérer NULL en base de données
Salut,
Après avoir lu le cour sur les bonnes pratiques pour les accès aux données j'ai décidé d'utiliser les requêtes paramétrées plutôt que des concaténations de chaînes. Seulement, je ne vois pas comment insérer une valeur NULL en base et, curieusement, ce n'est pas dans la FAQ. J'ai trouvé un message qui paraît clair. Mais je ne peux pas utiliser un type en tant qu'expression. Nothing me retourne une NullReferenceException et je ne veux pas mettre 0 ou "" par défaut comme je le fais aujourd'hui.
Pouvez-vous m'indiquer la marche à suivre?
Voici un concentré du code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| Private Sub executerSql2( _
ByVal codeStatut As Integer, _
Optional ByVal idDetail As Integer = 0, _
Optional ByVal exception As String = "", _
)
Dim oConn As SqlConnection = New SqlConnection("une chaîne de connexion quelconque")
Dim oCommand As SqlCommand = oConn.CreateCommand
Dim _idDetail As SqlParameter = oCommand.CreateParameter
Dim _codeStatut As SqlParameter = oCommand.CreateParameter
Dim _exception As SqlParameter = oCommand.CreateParameter
oCommand.CommandType = CommandType.Text
oCommand.CommandText = "insert into MA_TABLE (ID_DETAIL, CODE_STATUT, EXCEPTION) " & _
"values (@idDetail, @codeStatut, @exception)"
_idDetail.ParameterName = "@idDetail"
_idDetail.DbType = DbType.Int32
_idDetail.Direction = ParameterDirection.Input
_idDetail.IsNullable = True
_codeStatut.ParameterName = "@codeStatut"
_codeStatut.DbType = DbType.Int32
_codeStatut.Direction = ParameterDirection.Input
_codeStatut.IsNullable = False
_exception.ParameterName = "@exception"
_exception.DbType = DbType.String
_exception.Direction = ParameterDirection.Input
_exception.IsNullable = True
oCommand.Parameters.Add(_idDetail)
oCommand.Parameters.Add(_codeStatut)
oCommand.Parameters.Add(_exception)
_codeStatut.Value = codeStatut
_idDetail.Value = IIf(idDetail = 0, 0, idDetail)
_exception.Value = IIf(exception = "", "Null", exception.Replace("'", "''"))
oConn.Open()
oCommand.ExecuteNonQuery()
oConn.Close()
oCommand.Dispose()
oConn.Dispose()
End Sub |
Le problème intervient donc au niveau des Iif. Ce que j'ai mis ne me convient pas du tout. Une idée?
D'ailleurs je suis aussi ouvert à tout autre commentaire, comme les valeurs par défaut des arguments de la méthode.
Merci par avance.