none
Erro DateTime com NvarChar RRS feed

  • Pergunta

  • Tenho o codigo abaixo para importar dados e uma tabela pra outra.

    Então quando chego no 5 registro da o erro abaixo do meu codigo.

    string SQL ="INSERT INTO COLABORADORES (CHAPA,NOME,FUNCAO,DTMOB,CONTRATO,TIPO,EMPRESA,SETOR,MO,VALOR,SITUACAO,CC,DATE,USERNAME) VALUES (@CHAPA,@NOME,@FUNCAO,@DTMOB,@CONTRATO,@TIPO,@EMPRESA,@SETOR,@MO,@VALOR,@SITUACAO,@CC,@DATE,@USERNAME)";

                                   adapter.InsertCommand =new SqlCommand(SQL, connection);

                                   //Aqui vou adicinar o valor e o parametro ao comando

                                   //é preciso informar o tamanho da coluna no banco

                                   //e o nome dessa coluna no banco

                                   SqlParameter sqlCHAPA = adapter.InsertCommand.Parameters.Add("@CHAPA",SqlDbType.NVarChar, 6, "CHAPA");

                                  SqlParameter sqlNOME = adapter.InsertCommand.Parameters.Add("@NOME",SqlDbType.NVarChar, 30, "NOME");

                                   SqlParameter sqlFUNCAO = adapter.InsertCommand.Parameters.Add("@FUNCAO",SqlDbType.NVarChar, 20, "FUNCAO");

                                   SqlParameter sqlDTMOB = adapter.InsertCommand.Parameters.Add("@DTMOB",SqlDbType.NVarChar, 10, "DTMOB");

                                   SqlParameter sqlCONTRATO = adapter.InsertCommand.Parameters.Add("@CONTRATO",SqlDbType.NVarChar, 20, "CONTRATO");

                                   SqlParameter sqlTIPO = adapter.InsertCommand.Parameters.Add("@TIPO",SqlDbType.NVarChar, 20, "TIPO");

                                   SqlParameter sqlEMPRESA = adapter.InsertCommand.Parameters.Add("@EMPRESA",SqlDbType.NVarChar, 40, "EMPRESA");

                                   SqlParameter sqlSETOR = adapter.InsertCommand.Parameters.Add("@SETOR",SqlDbType.NVarChar, 50, "SETOR");

                                   SqlParameter sqlMO = adapter.InsertCommand.Parameters.Add("@MO",SqlDbType.NVarChar, 20, "MO");

                                   //SqlParameter sqlVALOR = adapter.InsertCommand.Parameters.Add("@VALOR", SqlDbType.NVarChar, 10, "VALOR");

                                   SqlParameter sqlVALOR = adapter.InsertCommand.Parameters.Add("@VALOR",SqlDbType.Decimal);

                                   SqlParameter sqlSITUACAO = adapter.InsertCommand.Parameters.Add("@SITUACAO",SqlDbType.NVarChar, 10, "SITUACAO");

                                   SqlParameter sqlCC = adapter.InsertCommand.Parameters.Add("@CC",SqlDbType.NVarChar, 3, "CC");

                                   SqlParameter sqlDATE = adapter.InsertCommand.Parameters.Add("@DATE",SqlDbType.NVarChar, 10, "DATE");

                                   SqlParameter sqlUSERNAME = adapter.InsertCommand.Parameters.Add("@USERNAME",SqlDbType.NVarChar, 30, "USERNAME");

                                   sqlCHAPA.Value = dr04["RA_MAT"];

                                   sqlNOME.Value = dr04["RA_NOME"];

                                   sqlFUNCAO.Value = dr04["RA_CODFUNC"];

                                   //Aqui eu mudo o formato da data de anomesdia para dd/mm/yyyy com as barras

                                   sqlDTMOB.Value = dr04["RA_ADMISSA"].ToString().Substring(6, 2) +"/" + dr04["RA_ADMISSA"].ToString().Substring(4, 2) +"/" + dr04["RA_ADMISSA"].ToString().Substring(0, 4);

                                   sqlCONTRATO.Value = dr04["RA_SGOCONT"];

                                   //TIPO

                                   sqlTIPO.Value ="FUNCIONÁRIO";

                                   sqlEMPRESA.Value = "ISOTEC ENGENHARIA LTDA";

                                   //SETOR

                                   sqlSETOR.Value = dr04["RA_SGOSETO"];

                                   //MO

                                   if (dr04["RA_REFCTA"] !=null)

                                   {

                                       if (dr04["RA_REFCTA"] =="2")

                                       {

                                           sqlMO.Value ="DIRETA";

                                       }

                                       else

                                       {

                                           sqlMO.Value = "INDIRETA";

                                       }

                                   }

                                   //VALOR

                                   sqlVALOR.Value = dr04["RA_SALARIO"];

                                   sqlSITUACAO.Value ="NORMAL";

                                   //CC

                                   sqlCC.Value = TextBoxCentrodeCusto.Text;

                                   //USERNAME

                                   MembershipUser user = Membership.GetUser();

                                   if (user != null)

                                   {

                                       sqlUSERNAME.Value = user.UserName;

                                   }

                                   //DATE

                                   sqlDATE.Value = DateTime.Now.ToString("dd/MM/yyyy");

                                   adapter.InsertCommand.ExecuteNonQuery();

                                   data.AcceptChanges();

    Eu ja analisei meu codigo debugando mas não encontrei nada fora do comum.

    Sera que vc pode me ajudar.

    O Erro esta logo abaixo:


    Server Error in '/' Application.



    The conversion of a nvarchar data type to a datetime data type resulted
    in an out-of-range value.
    The statement has been terminated.

    Description:
    An unhandled exception occurred during the execution of the current web
    request. Please review the stack trace for more information about the error and
    where it originated in the code.

    Exception Details:
    System.Data.SqlClient.SqlException: The conversion of a nvarchar data type
    to a datetime data type resulted in an out-of-range value.
    The statement has
    been terminated.

    Source Error:
    Line 208:
    Line 209:
    Line 210:                                adapter.InsertCommand.ExecuteNonQuery();
    Line 211:                                data.AcceptChanges();
    Line 212:                            }
    quinta-feira, 11 de julho de 2013 11:08

Respostas

  • Olá

    Voce pode usar o paramentro com o tipo SqlDbType.DateTime e passar o valor em DateTime ao inves de string...


    Microsoft Community Contributor

    • Marcado como Resposta ricardoti2012 sexta-feira, 12 de julho de 2013 19:11
    quinta-feira, 11 de julho de 2013 20:01
    Moderador

Todas as Respostas

  • Paulo,

    Você tem 2 opções:

    1. Verifique se o idioma do seu user do banco de dados está em "Brazilian".
    2. ou Altere o formato de data para yyyy-MM-dd.

    Rafael Schettino

    quinta-feira, 11 de julho de 2013 12:45
  • Mas se ele grava os 5 primeiros registros certinhos por que eu teria que mudar a data ou idima.

    Se for assim não gravaria nem 1 registro.

    Esse problema so ocorre no 6 registro e eu analisei o campo data que esta igual aos demais que ja foram gravados dd/MM/yyyy.

    Mas não entendi porque este erro ocorre no 6 registro.

    Sera que alguem pode me ajudar.

    Aguardo Retorno.

    Obrigado.

    quinta-feira, 11 de julho de 2013 15:45
  • Imagine o seguinte cenário:

    - Data 1 : 01/01/2013 - Funciona em Brazilian e em English.
    - Data 2: 01/02/2013 - Funciona em Brazilian e em English.
    - Data 3: 31/12/2013 - Funciona em Brazilian, mas não em English.
    - Data 4: 12/31/2013 - Funciona em English, mas não em Brazilian.

    Talvez por isso esteja dando erro somente em um registro específico.


    Rafael Schettino

    quinta-feira, 11 de julho de 2013 16:03
  • Rafael eu analisei meu codido e sua explicação acima.
    Eu entendi o seu cenario.
    O meu banco de dados só aceita a data em formato dd/mm/yyyy conforme testei colocando os dados direto no banco de dados e analisando informações de datas ja existentes.
    E no meu codigo eu tambem formato em dd/MM/yyyy.

    Então eu fiquei agora sem entender o pq esta dando este erro ja que ambos estão no mesmo formato.

    Estou debugando aqui mas não encontro nada até agora que possa estar errado com minha data ja que a mesma esta no formato correto.

    Assim que tiver um tempo e puder me ajudar eu agradeço.

    Obrigado.

    quinta-feira, 11 de julho de 2013 19:39
  • Poderia me mandar as datas que funcionam e as datas que estão dando erro para eu analisar?
    Se possível, me mande também um create table para eu ver a estrutura da tabela.

    Rafael Schettino

    quinta-feira, 11 de julho de 2013 19:58
  • Olá

    Voce pode usar o paramentro com o tipo SqlDbType.DateTime e passar o valor em DateTime ao inves de string...


    Microsoft Community Contributor

    • Marcado como Resposta ricardoti2012 sexta-feira, 12 de julho de 2013 19:11
    quinta-feira, 11 de julho de 2013 20:01
    Moderador
  • Valeu Rui Santos

    Resolveu o problema.

    Ja marquei como resposta.

    Obrigado.

    sexta-feira, 12 de julho de 2013 19:12