Usuário com melhor resposta
Erro DateTime com NvarChar

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
Description:
in an out-of-range value.
The statement has been terminated.
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: }
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
Todas as Respostas
-
-
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.
-
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
-
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.
-
-
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
-