2010-03-05 25 views
13

No estoy seguro de por qué VB hace que todo sea tan doloroso. Tengo unos campos que almacena la fecha y la hora en el formato requerido para almacenar la base de datos MySQLCómo asignar valores nulos en MySql usando 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 

ahora tengo que asignar el AppDate a NULL como DBNull, pero no soy capaz de hacerlo directamente. Si cambio AppDate a Date, entonces no obtengo el formato requerido.

Cualquier ayuda es apreciada.

Gracias de antemano.

+0

Consejo: Con .NET 4 puede utilizar "String.IsNullOrWhiteSpace (Me.AppDate)". –

Respuesta

10

AppDate = Nada debería funcionar, también se puede utilizar DateTime.MinValue y actualizar su lógica de negocio para tratar de manera adecuada.

+0

Gracias a todos por todos los consejos. Tuve que usar la función IIF en mi instrucción INSERT aparte de AppDate = Nothing. – fireBand

9

AppDate = Nada

+0

No funciona, esto insertará "0000-00-00 00:00:00" en la base de datos. Necesito ingresar Nulo. – fireBand

+0

Actualiza la lógica de negocios como lo menciona Dan. Esto no es un problema de VB.NET. – AMissico

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

El valor de cadena devuelta por el método DbNull.ToString() es la cadena ("") vacío, lo que puede implicar que la representación de cadena de DBNull es la cadena vacía.

4

la fecha y la hora en el formato requerido para almacenar la base de datos MySQL

Si usted está construyendo una cadena de fecha y hora para salvar a una base de datos, que estás haciendo todo mal.

Usando el MySQL Connector/Net, que debe ser la construcción de su consulta como esta:

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 permite NULL valores de fecha y hora sólo si se configura ConvertZeroDateTime=True opción en connectionstring. Este valor está establecido en false de forma predeterminada.


MySql Documentation describe:

ConvertZeroDateTime (por defecto: Falso) :

Fiel a tener MySqlDataReader.GetValue() y MySqlDataReader.GetDateTime() Fecha y hora de retorno. MinValue para columnas de fecha o de fecha y hora que tienen valores no permitidos.


AllowZeroDateTime (por defecto: Falso) :

Si es verdadero, MySqlDataReader.GetValue() devuelve un objeto MySqlDateTime de fecha o de fecha y hora columnas que se han anulado valores, como valores de fecha y hora cero, y un objeto System.DateTime para valores válidos. Si se establece en False (la configuración predeterminada), provoca que se devuelva un objeto System.DateTime para todos los valores válidos y que se genere una excepción para los valores no permitidos, como los valores de fecha y hora cero.

0

este actully la única forma en que trabajó para mí, sólo tiene que utilizar System.Data.SqlTypes.Sql Tipo de datos .NULL por ejemplo, cuando un campo SQL es tipo char (3), a continuación, utilizar System.Data.SqlTypes .SqlChars.Null, String.Empty o nada no funcionaba para mí

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 
Cuestiones relacionadas