Foros del Web » Programando para Internet » ASPX (.net) »

Problema con DateTime en TableAdapter

Estas en el tema de Problema con DateTime en TableAdapter en el foro de ASPX (.net) en Foros del Web. Buenas! Tengo una aplicación en la que tengo un TableAdapter que lee los datos de la tabla y llena un DataSet Tipado. En la aplicación ...
  #1 (permalink)  
Antiguo 26/09/2006, 01:26
 
Fecha de Ingreso: marzo-2003
Mensajes: 85
Antigüedad: 21 años, 1 mes
Puntos: 1
Problema con DateTime en TableAdapter

Buenas!

Tengo una aplicación en la que tengo un TableAdapter que lee los datos de la tabla y llena un DataSet Tipado. En la aplicación tengo una página, tipo DetailsView, desde la que puedes editar los datos de un registro concreto o dar de alta un nuevo registro.

Mi problema está a la hora de editar y llenar los campos de tipo smallDateTime de la BD: en algunas ocasiones puede que antes tuvieran un valor y ahora necesito quitárselo y asignarle Null, ¡¡pero no encuentro la forma!! ¿alguna idea o ayuda?

Os pongo el código a continuación para que podáis ver cómo lo hago y ver si os ayuda para decirme algo.

Código:
Imports System.Data

Partial Class dlpm_rI_Det
    Inherits System.Web.UI.Page

    Private dsRInd As dsP.P_RIDataTable
    Private taRInd As dsPTableAdapters.P_RITableAdapter
    Private fila As dsP.P_RIRow
    Private intIdRI As Int32

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Request.Params("IdRI") <> "" Then Me.intIdRI = Request.Params("IdRI")
        Me.dsRInd = New dsP.P_RIDataTable
        Me.taRInd = New dsPTableAdapters.P_RITableAdapter
        Me.dsRInd = Me.taRInd.GetAllRI()
        If Not IsPostBack Then
            'Seleccionamos la fecha de hoy en los combos de fecha.
            Me.cboDia.SelectedValue = Today.Day.ToString.PadLeft(2, "0")
            Me.cboMes.SelectedValue = Today.Month.ToString.PadLeft(2, "0")
            Me.cboAnio.SelectedValue = Today.Year.ToString()
            If Me.intIdRI <> 0 Then CargaDatos()
        End If
    End Sub

    Private Sub CargaDatos()
        Dim faux As DateTime
        'Enlaza a los datos para buscar el pasado en los parámetros.
        fila = Me.dsRInd.FindByidRI(Me.intIdRI)

        Me.txtNR.Text = fila.NR
        'Los valores nulos lanzan una excepción, hay que controlarla para seguir adelante.
        'Albarán
        Try
            Me.txtAlbaran.Text = fila.AlbaranEntrada
        Catch ex As Exception
            Me.txtAlbaran.Text = ""
        End Try
        Try
            'FechaEntrada siempre tendrá un valor
            faux = fila.FechaEntrada
            Me.cboDia.SelectedValue = faux.Day.ToString.PadLeft(2, "0")
            Me.cboMes.SelectedValue = faux.Month.ToString.PadLeft(2, "0")
            Me.cboAnio.SelectedValue = faux.Year.ToString()
        Catch
            Me.cboDia.SelectedIndex = -1
            Me.cboMes.SelectedIndex = -1
            Me.cboAnio.SelectedIndex = -1
        End Try
        'EstadoUso siempre tendrá un valor
        Me.cboEstado.SelectedValue = fila.EstadoUso
    End Sub

    Protected Sub bGuardar_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles bGuardar.Click
        If intIdRI = 0 Then
            fila = Me.dsRInd.NewRow()
        Else
            fila = Me.dsRInd.FindByidRecursoIndividual(Me.intIdRI)
        End If
        fila.NR = Me.txtNR.Text.Trim()
        If Me.txtAlbaran.Text.Trim() <> "" Then fila.AlbaranEntrada = Me.txtAlbaran.Text.Trim() Else fila.AlbaranEntrada = Nothing
        fila.FechaEntrada = Nothing
        fila.EstadoUso = Me.cboEstado.SelectedValue()
        If intIdRI = 0 Then Me.dsRInd.Rows.Add(fila)
        Me.taRInd.Update(Me.dsRInd)
        CargaDatos()
    End Sub
End Class
Tal como os lo pongo me da error tanto al insertar como al editar, por estar forzando el valor de FechaEntrada. Al ponerlo tal como está se produce el error: "Desbordamiento de SqlDateTime. Debe estar entre 1/1/1753 12:00:00 AM y 12/31/9999 11:59:59 PM.".

Evidentemente al ser tipado no puedo igualarlo a DBNull.Value, porque ya da error de compilación al no poder convertir éste valor en uno de tipo DateTime.

Espero vuestra ayuda.

Muchas gracias.

Un saludo

Última edición por Mitico; 27/09/2006 a las 04:47
  #2 (permalink)  
Antiguo 27/09/2006, 01:32
 
Fecha de Ingreso: marzo-2003
Mensajes: 85
Antigüedad: 21 años, 1 mes
Puntos: 1
¡¡Alguna idea por favor!!

Toy desesperao!
  #3 (permalink)  
Antiguo 27/09/2006, 04:53
 
Fecha de Ingreso: marzo-2003
Mensajes: 85
Antigüedad: 21 años, 1 mes
Puntos: 1
He consegido hacerlo llamando directamente a los métodos Insert y Update del TableAdapter, pasando en los parámetros el valor adecuado.

Os lo pongo por si a alguien le sirve. No obstante agradecería alguna ayuda si alguien sabe cómo hacerlo de la otra manera.

Gracias.

Código:
    Protected Sub bGuardar_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles bGuardar.Click
        Dim fEntrada As Date
        fEntrada = New Date(Me.cboAnio.SelectedValue(), Me.cboMes.SelectedValue(), Me.cboDia.SelectedValue())
        If intIdRI = 0 Then
            Me.taRInd.Insert(Me.txtNR.Text.Trim(), _
                    IIf(Me.txtAlbaran.Text.Trim() <> "", Me.txtAlbaran.Text.Trim(), Nothing), _)
                    IIf(Me.cboEstado.SelectedValue = 2, fEntrada.Date(), Nothing), _
                    Me.cboEstado.SelectedValue())
        Else
            Me.taRInd.Update(Me.txtNR.Text.Trim(), _
                    IIf(Me.txtAlbaran.Text.Trim() <> "", Me.txtAlbaran.Text.Trim(), Nothing), _
                    IIf(Me.cboEstado.SelectedValue = 2, fEntrada.Date(), Nothing), _
                    Me.cboEstado.SelectedValue())
        End If

        CargaDatos()
    End Sub
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:43.