Costeleta 0 Denunciar post Postado Setembro 16, 2008 Amigos, estou desenvolvendo um script que carrega uma tabela no banco com dados de um arquivo csv, conforme código abaixo. o programa está compilando, mas na hora da execução da um erro de codigo ORA-00911 dizendo que existe um caracter invalido na parte da query. alguem poderia me ajudar a identificar este erro. já tetei de tudo e não obtive exito. private void button1_Click(object sender, EventArgs e) { try { //definição da string de conexão com o banco de dados. string constr = "Data Source =XXXXXXXXXXXXX;User Id=ZZZZZZZZZZZ;Password=WwWwwW"; //instanciando o objeto de conexão com o banco de dados, onde é passado a string de conexão por parâmetro. OracleConnection con = new OracleConnection(constr); //abrindo conexão con.Open(); //criando o comando que fará a consulta ao banco de dados. OracleCommand cmd = con.CreateCommand(); cmd.CommandText = "SELECT TO_CHAR(SYSDATE-2,'YYYYMMDD') AS DATASIST FROM DUAL"; OracleDataReader reader3 = cmd.ExecuteReader(); string datasist; // variável que receberá a data de ontem. reader3.Read(); datasist = Convert.ToString(reader3["DATASIST"]); string nomeArquivo = "AAAA_bbb_CC" + datasist + ".csv"; //método que faz o download do arquivo para C:\ TransfereArquivoFtpLocal(nomeArquivo); cmd.CommandText = "INSERT INTO CARREGAEMA(DIA, ELEMENTO_DE_REDE, HORA, RETORNO_ID, QT_DE_COMANDO, COMANDO_DESC)\n"; cmd.CommandText += "Values(?DIA, ?ElementoOriginador, ?Hora, ?CODRetorno, ?QtdeComando, ?Comando)"; cmd.Parameters.Add(new OracleParameter("DIA", OracleDbType.Date)); cmd.Parameters.Add(new OracleParameter("ElementoOriginador", OracleDbType.Varchar2, 200)); cmd.Parameters.Add(new OracleParameter("Hora", OracleDbType.Int32)); cmd.Parameters.Add(new OracleParameter("CODRetorno", OracleDbType.Int32)); cmd.Parameters.Add(new OracleParameter("QtdeComando", OracleDbType.Int32)); cmd.Parameters.Add(new OracleParameter("Comando", OracleDbType.Varchar2, 200)); string strCaminho = "C:\\AAAA_bbb_CC" + datasist + ".csv"; StreamReader sr = new StreamReader(strCaminho); string[] registro; string linha; while ((linha = sr.ReadLine()) != null) { registro = linha.Split(';'); cmd.Parameters["DIA"].Value = registro[0]; cmd.Parameters["ElementoOriginador"].Value = registro[1]; cmd.Parameters["Hora"].Value = registro[2]; cmd.Parameters["CODRetorno"].Value = registro[3]; cmd.Parameters["QtdeComando"].Value = registro[4]; cmd.Parameters["Comando"].Value = registro[5]; cmd.CommandTimeout = 1000; cmd.ExecuteNonQuery(); } } catch (Exception ex) { this.SalvarArquivo(DateTime.Now.ToString("ddMMyyyy HHmmss.") + "erro", "Falha no programa principal." + ex.ToString()); } } Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Setembro 16, 2008 Em qual linha esta dando este erro? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Costeleta 0 Denunciar post Postado Setembro 17, 2008 Em qual linha esta dando este erro? Abraços... NA EXECUÇÃO DO INSERT, OU SEJA, NA LINHA QUE TEM O "cmd.ExecuteNonQuery();" ELE TEM GERADO O SEGUINTE ERRO: Oracle.DataAccess.Client.OracleException was unhandled Message="ORA-00911: invalid character" Source="Oracle Data Provider for .NET" Number=911 Procedure="" StackTrace: at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure) at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src) at Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery() at carrega_EMA.Form1.button1_Click(Object sender, EventArgs e) in C:\Documents and Settings\XXXXXXX\My Documents\Visual Studio 2005\Projects\carrega_EMA_Application\carrega_EMA\Form1.cs:line 98 Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Setembro 17, 2008 Já reparou se existe algum caracter especial nos dados do registro que esta sendo inserido? Por que eu acho que não é problema de sintaxe e sim algo nos dados. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Costeleta 0 Denunciar post Postado Setembro 17, 2008 Já reparou se existe algum caracter especial nos dados do registro que esta sendo inserido? Por que eu acho que não é problema de sintaxe e sim algo nos dados. Abraços... Sim cara existe sim! A coluna COMANDO_DESC possui os caracteres *, <, > : no meio do texto. E as colunas HORA, RETORNO_ID e QT_DE_COMANDO no banco são do tipo number e os parâmetros eu declarei como int32, pois não encontrei number no OracleParameter.OracleDbType. Será que essas coisas podem influenciar? Como devo proceder? tem gerado o seguinte erro: Oracle.DataAccess.Client.OracleException was unhandled Message="ORA-00911: invalid character" Source="Oracle Data Provider for .NET" DataSource="XXXXXXXXXXXXXXXXXXXXXXXX" Number=911 Procedure="" StackTrace: at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure) at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src) at Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery() at carrega_EMA.Form1.button1_Click(Object sender, EventArgs e) in C:\Documents and Settings\XXXXXXXX\My Documents\Visual Studio 2005\Projects\carrega_EMA_Application\carrega_EMA\Form1.cs:line 98 Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Setembro 17, 2008 Não trabalhei com o Oracle ainda, mas qualquer um dos casos que você citou pode estar gerando o erro, não sei exatamente quais deles. Tente retirar esses caracteres para ver se o problema é este. No lugar do number, veja se tem decimal ou algo do tipo ao invés de usar int. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites