none
Leitura de Dados tipo DateTime no MySql utlizando C# <Conversão especificada não é válida> RRS feed

  • Pergunta

  • Boa tarde a todos,

    Sou iniciante em desenvolvimento .NET, e estou com um dificuldade:

    Tenho uma tabela (Usuarios) em uma Base de Dados MySql, e a mesma contém um campo do tipo DateTime,não consigo retornar valores desse campo, tenho como excessão a seguinte mensagem:

     

    "Conversão especificada não é válida"

    Abaixo os objetos que realizam a transação:

     

    Classe Usuário:

     

    public Usuario()

    {

    }

     

         public Usuario

               (Nullable<DateTime> lastActivityDate) 

     

           {

     

                           this._lastActivityDate = lastActivityDate;

     

                        }              

     

        Nullable<DateTime> lastActivityDate

        {

            get { return _lastActivityDate; }

            set { _lastActivityDate = value; }

        }

        }

    }

     

     

     

    Classe Provider:

     

    protected virtual Usuario GetUsuarioFromReader(IDataReader Reader)

     

        {

            return new Usuario

                                (

     

                                (Nullable<DateTime>)Reader["lastActivityDate"]                         

     

                                );

        }

     

        protected virtual List<Usuario> GetUsuarioCollectionfromReader(IDataReader reader)

        {

            List<Usuario> ListaUsuario = new List<Usuario>();

            while (reader.Read())               

                ListaUsuario.Add(GetUsuarioFromReader(reader));

            return ListaUsuario;    

        }

    }

     

     

    Classe DAL:

     

     

    using System;

    using System.Collections.Generic;

    using System.Xml.Linq;

    using System.Web;

    using System.Data;

    using System.Data.SqlClient;

    using System.Configuration;

    using MySql.Data.MySqlClient;

     

     

    public class DAL_Default : Provider

    {

        public DAL_Default()

        {

     

        }

     

     

        public override List<Usuario> GetUsuario()

        {

            using (MySqlConnection cn = new MySqlConnection(this.connectionString))

            {

                MySqlCommand cmd = new MySqlCommand(

                                                    "select id," +

                                                    "ifnull(lastActivityDate,'01/01/0001 00:00:00')as lastActivityDate " +

     

                                                    "from my_aspnet_users", cn

                                                    );

                cmd.CommandType = CommandType.Text;

                cn.Open();

                return GetUsuarioCollectionfromReader(ExecuteReader(cmd));

            }

     

        }

    }

    Classe de Acesso a Dados:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using MySql.Data;
    using System.Data;
    using System.Data.Common;

    public abstract class DataAccess
    {
        public DataAccess()
        {
            // TODO: Add constructor logic here
        }

        private string _connectionString = "";

        protected string connectionString

                                        {
                                            get { return _connectionString; }
                                            set { _connectionString = value; }
                                        }

        protected int ExecuteNonQuery(DbCommand cmd) 
        {    
            foreach(DbParameter param in cmd.Parameters)
            {
               if (param.Direction == ParameterDirection.Output || param.Direction == ParameterDirection.ReturnValue)
               {
                   switch(param.DbType)
                   {
                       case DbType.AnsiString:
                       case DbType.AnsiStringFixedLength:
                       case DbType.String:
                       case DbType.StringFixedLength:
                       case DbType.Xml:
                           param.Value="";
                           break;

                       case DbType.Boolean:
                           param.Value=false;
                           break;

                       case DbType.Byte:
                           param.Value=byte.MinValue;
                           break;

                       case DbType.Date:
                       case DbType.DateTime:
                           param.Value = DateTime.MinValue; 
                           break;
                     
                       case DbType.Currency:
                       case DbType.Decimal:
                           param.Value=decimal.MinValue;
                           break;

                       case DbType.Guid:
                           param.Value=Guid.Empty;
                           break;

                       case DbType.Double:
                       case DbType.Int16:                       
                       case DbType.Int32:                    
                       case DbType.Int64:
                           param.Value=0;
                           break;
                           
                       default: param.Value=null;
                           break;
                   }
               }
            }
                   return cmd.ExecuteNonQuery();
        }
        
                        protected IDataReader ExecuteReader(DbCommand cmd)
                        {
                            return ExecuteReader(cmd,CommandBehavior.Default);
                        }

                        protected IDataReader ExecuteReader(DbCommand cmd,CommandBehavior behavior) 
                        {
                            return cmd.ExecuteReader(behavior);
                        }
       
        
                        protected object ExecuteEscalar(DbCommand cmd)
                        {
                            return cmd.ExecuteScalar();
                        }
      
    }    

     


    Coladela
    quinta-feira, 16 de dezembro de 2010 18:31

Respostas

  • Malange, 

     

    Meu problema foi corrigido paleativamente, convertendo este campo para o tipo CHAR em meu select, assim consigo tratá-lo como  String no C#, por hora consig o que precisava.

     

    Mais uma vez obrigado. 


    Coladela
    • Marcado como Resposta Perfil Inativado sexta-feira, 17 de dezembro de 2010 13:13
    sexta-feira, 17 de dezembro de 2010 13:13

Todas as Respostas