2010-03-05 4 views
13

Je ne suis pas sûr de savoir pourquoi VB fait tout mal. J'ai des champs qui stocke la date et l'heure dans le format requis pour stocker dans la base de données MySQLComment attribuer des valeurs NULL dans MySQL en utilisant VB.NET

Dim AppDate As String = String.Empty 
     If Not String.IsNullOrEmpty(Me.AppDate.Text.Trim) Then 
     AppDate = Format(CDate(Me.AppDate.Text), "yyyy-MM-dd h:mm:ss") 
     Else 
     //Need to assign a null value to AppDate 
     End If 

Maintenant je dois attribuer le AppDate à Null comme DBNull, mais je ne suis pas en mesure de le faire directement. Si je change AppDate en Date, je n'obtiens pas le format requis.

Toute aide est appréciée.

Merci à l'avance.

+0

Astuce: Avec .NET 4, vous pouvez utiliser "String.IsNullOrWhiteSpace (Me.AppDate)". –

Répondre

10

AppDate = Rien ne devrait fonctionner, vous pouvez également utiliser DateTime.MinValue et mettre à jour votre logique métier pour traiter de manière appropriée.

+0

Merci à tous pour tous les conseils. J'ai dû utiliser la fonction IIF dans mon instruction INSERT en dehors de AppDate = Nothing. – fireBand

9

AppDate = Nothing

+0

Ne fonctionne pas cela va insérer "0000-00-00 00:00:00" dans la base de données. Je dois entrer Null. – fireBand

+0

Mettez à jour la logique métier comme le mentionne Dan. Ce n'est pas un problème VB.NET. – AMissico

0
AppDate = DbNull.Value 'does this work? 
0

La valeur de chaîne renvoyée par la méthode DbNull.ToString() est la chaîne vide (« »), ce qui peut impliquer que la représentation de chaîne de DBNull est la chaîne vide.

4

la date et l'heure dans le format requis pour stocker dans la base de données MySQL

Si vous construisez une chaîne datetime pour enregistrer dans une base de données, vous il fait tout faux.

Utilisation du connecteur MySql/Net, vous devez construire votre requête comme ceci:

Dim sql As String = "UPDATE `MyTable` SET `MyField` = @MyField WHERE `ID` = @MyID" 
Using cn As New MySqlconnection("..your connection string here.."), _ 
     cmd As New SqlCommand(sql, cn) 

    cmd.Parameters.Add("@MyField", MySqlDbType.DateTime).Value = MyDateTimeVar ''# NO FORMATTING NEEDED! 
    cmd.Parameters.Add("@MyID", MySqlDbType.Int).Value = MyIDIntegerVar 

    cn.Open() 
    cmd.ExecuteNonQuery() 
End Using 
0

Mysql permet NULL valeurs datetime que si vous définissez l'option ConvertZeroDateTime=True dans connectionstring. Cette valeur est définie par défaut sur false.


MySql Documentation Décrit:

ConvertZeroDateTime (Par défaut: Faux) :

Fidèle à avoir MySqlDataReader.GetValue() et MySqlDataReader.GetDateTime() Dateheure de retour. MinValue pour les colonnes datetime ou datetime ayant des valeurs non autorisées.


AllowZeroDateTime (Par défaut: Faux) :

Si vrai, MySqlDataReader.GetValue() retourne un objet MySqlDateTime pour les colonnes de date ou datetime qui ont refusé valeurs, telles que les valeurs datetime zéro, et un objet System.DateTime pour les valeurs valides. Si la valeur est False (paramètre par défaut), un objet System.DateTime est renvoyé pour toutes les valeurs valides et une exception est levée pour les valeurs non autorisées, telles que les valeurs de date/heure zéro.

0

ce actully la seule façon dont il a fonctionné pour moi, il suffit d'utiliser System.Data.SqlTypes.Sql Type de données par exemple .NULL lorsqu'un champ est sql type Char (3), puis utilisez System.Data.SqlTypes .SqlChars.Null, String.Empty ou rien n'a pas fonctionné pour moi

Dim SQLCom = New SqlCommand 
    Dim SQLCon As New SqlClient.SqlConnection(_ConnString) 
    Dim _Param5 As New SqlParameter("@FieldName", SqlDbType.Char, 3) 
    With SQLCom 
     .Connection = SQLCon 
     .CommandText = "StoredProcedure_name" 
     .CommandType = CommandType.StoredProcedure 
     .Parameters.Add(_Parameter5) 
    End With 
    _Parameter5.Value = System.Data.SqlTypes.SqlChars.Null