MISTÉRIO NO VB.NET COM ORACLE
Bom dia,Colegas!
Estou com um problema, inusitado!
Tenho de fazer uma simples consulta na base Oracle (10G).
Meu método (VB.NET), consegue acessar qualquer tabela ou consulta
na BD.No entanto tem uma consulta em particular que não retorna nenhum dado.
Porque é um mistério:
1. Quando copio e colo esta mesma consulta(SQL) no SqlPlus do Oracle, por exemplo a instrução Sql
é executada normalmente e até bem rápido , retornando dezenas de registros.
2. Eu executo ,usando o [Ô]mesmo código[Ô] qualquer consulta na base e tudo retorna perfeito
3.) O Try Catch do VB.Net nao retorna nenhuma exceção (Erro), quando executo o código usando esta instrução Sql
Algum colega, já se deparou com esta situação. De conseguir executar a consulta Sql no Banco (Pelo SqlPlus), mas não
a partir da aplicação???
Agradeço qualquer auxÃlio.
Estou com um problema, inusitado!
Tenho de fazer uma simples consulta na base Oracle (10G).
Meu método (VB.NET), consegue acessar qualquer tabela ou consulta
na BD.No entanto tem uma consulta em particular que não retorna nenhum dado.
Porque é um mistério:
1. Quando copio e colo esta mesma consulta(SQL) no SqlPlus do Oracle, por exemplo a instrução Sql
é executada normalmente e até bem rápido , retornando dezenas de registros.
2. Eu executo ,usando o [Ô]mesmo código[Ô] qualquer consulta na base e tudo retorna perfeito
3.) O Try Catch do VB.Net nao retorna nenhuma exceção (Erro), quando executo o código usando esta instrução Sql
Algum colega, já se deparou com esta situação. De conseguir executar a consulta Sql no Banco (Pelo SqlPlus), mas não
a partir da aplicação???
Agradeço qualquer auxÃlio.
Banco,tabela tudo bem.
Onde está a escrita do código?
Onde está a escrita do código?
Usa a versão gratuita do Oracle, ele suporta no máximo 10Gb. Não seria alguma limitação a causa do problema?
As configurações da conexão são as mesmas?
Colegas,
1. As configurações são exatamente as mesmas ( Uso a mesma String de conexão e o mesmo método para fazer outras consultas,sem problema)
2. Não é a versão Free , é a versão profissional do Oracle (10G)
3. O código segue abaixo. Se alguém puder me dizer se já tiveram problema parecido,fico grato.
Public Function Pesquisa() As DataTable
[ô]Declara variáveis
Dim Ada As New OleDbDataAdapter
Dim Dt As DataTable
Dim InstrucaoSql As String
Dim StringDeConexao As String
Dim Con As New OleDbConnection
Try
[ô]Define String de conexão
StringDeConexao = [Ô]Provider=OraOLEDB.Oracle;Data Source=MinhaDataBase;User ID=MeuId;Password=MinhaSenha[Ô]
[ô]Cria objeto conexão (Oracle)
Con = New OleDbConnection(StringDeConexao)
[ô]Abre conexão
Con.Open()
InstrucaoSql = [Ô] select b.codfunc,b.nomefunc,c.codigolinha,d.prefixoveic,a.dtdigit,iddigit,a.codocorr,a.normaldm,a.extradm[Ô] _
[Ô] ,a.entradigit,a.saidadigit,descocorr,descmapaocorr from frq_digitacaomovimento a inner join[Ô] _
[Ô] flp_funcionarios b on (a.codintfunc=b.codintfunc) left outer join bgm_cadlinhas c on (a.codintlinha=c.codintlinha)[Ô] _
[Ô] left outer join frt_cadveiculos d on (a.codigoveic=d.codigoveic) inner join frq_ocorrencia e on (a.codocorr=e.codocorr)[Ô] _
[Ô] where dtdigit between [ô]28 nov 2016[ô] and [ô]06 dec 2016[ô] and codfunc = [ô]010917[ô] order by 1
[ô]Criar DataAdapter
Ada = New OleDbDataAdapter(InstrucaoSql, Con)
[ô]Criar objeto
Dt = New DataTable
[ô]Trasfere dados para DataTable
Ada.Fill(Dt)
[ô]Returna valor
Return Dt
Catch ex As Exception
[ô]Retorna valor
Return Nothing
Finally
[ô]Abre conexão
Con.Close()
End Try
End Function
1. As configurações são exatamente as mesmas ( Uso a mesma String de conexão e o mesmo método para fazer outras consultas,sem problema)
2. Não é a versão Free , é a versão profissional do Oracle (10G)
3. O código segue abaixo. Se alguém puder me dizer se já tiveram problema parecido,fico grato.
Public Function Pesquisa() As DataTable
[ô]Declara variáveis
Dim Ada As New OleDbDataAdapter
Dim Dt As DataTable
Dim InstrucaoSql As String
Dim StringDeConexao As String
Dim Con As New OleDbConnection
Try
[ô]Define String de conexão
StringDeConexao = [Ô]Provider=OraOLEDB.Oracle;Data Source=MinhaDataBase;User ID=MeuId;Password=MinhaSenha[Ô]
[ô]Cria objeto conexão (Oracle)
Con = New OleDbConnection(StringDeConexao)
[ô]Abre conexão
Con.Open()
InstrucaoSql = [Ô] select b.codfunc,b.nomefunc,c.codigolinha,d.prefixoveic,a.dtdigit,iddigit,a.codocorr,a.normaldm,a.extradm[Ô] _
[Ô] ,a.entradigit,a.saidadigit,descocorr,descmapaocorr from frq_digitacaomovimento a inner join[Ô] _
[Ô] flp_funcionarios b on (a.codintfunc=b.codintfunc) left outer join bgm_cadlinhas c on (a.codintlinha=c.codintlinha)[Ô] _
[Ô] left outer join frt_cadveiculos d on (a.codigoveic=d.codigoveic) inner join frq_ocorrencia e on (a.codocorr=e.codocorr)[Ô] _
[Ô] where dtdigit between [ô]28 nov 2016[ô] and [ô]06 dec 2016[ô] and codfunc = [ô]010917[ô] order by 1
[ô]Criar DataAdapter
Ada = New OleDbDataAdapter(InstrucaoSql, Con)
[ô]Criar objeto
Dt = New DataTable
[ô]Trasfere dados para DataTable
Ada.Fill(Dt)
[ô]Returna valor
Return Dt
Catch ex As Exception
[ô]Retorna valor
Return Nothing
Finally
[ô]Abre conexão
Con.Close()
End Try
End Function
Estou vendo que vc está usando data na cláusula where... pode ser exista diferença no formato da data... faca um teste, tira as datas da cláusula where e veja se funciona
InstrucaoSql = [Ô] select b.codfunc,b.nomefunc,c.codigolinha,d.prefixoveic,a.dtdigit,[txt-color=#e80000]iddigit[/txt-color],a.codocorr,a.normaldm,a.extradm[Ô] _
[Ô] ,a.entradigit,a.saidadigit,[txt-color=#e80000]descocorr[/txt-color],[txt-color=#e80000]descmapaocorr [/txt-color]from frq_digitacaomovimento a inner join[Ô] _
[Ô] flp_funcionarios b on (a.codintfunc=b.codintfunc) left outer join bgm_cadlinhas c on (a.codintlinha=c.codintlinha)[Ô] _
[Ô] left outer join frt_cadveiculos d on (a.codigoveic=d.codigoveic) inner join frq_ocorrencia e on (a.codocorr=e.codocorr)[Ô] _
[Ô] where [txt-color=#e80000]dtdigit[/txt-color] between [ô]28 nov 2016[ô] and [ô]06 dec 2016[ô] and [txt-color=#e80000]codfunc [/txt-color]= [ô]010917[ô] order by 1
Letra representando a tabela.
Verifica
[Ô] ,a.entradigit,a.saidadigit,[txt-color=#e80000]descocorr[/txt-color],[txt-color=#e80000]descmapaocorr [/txt-color]from frq_digitacaomovimento a inner join[Ô] _
[Ô] flp_funcionarios b on (a.codintfunc=b.codintfunc) left outer join bgm_cadlinhas c on (a.codintlinha=c.codintlinha)[Ô] _
[Ô] left outer join frt_cadveiculos d on (a.codigoveic=d.codigoveic) inner join frq_ocorrencia e on (a.codocorr=e.codocorr)[Ô] _
[Ô] where [txt-color=#e80000]dtdigit[/txt-color] between [ô]28 nov 2016[ô] and [ô]06 dec 2016[ô] and [txt-color=#e80000]codfunc [/txt-color]= [ô]010917[ô] order by 1
Letra representando a tabela.
Verifica
1 - Você está usando OleDB quando já existe um data provider Oracle especÃfico para .NET, use-o
2 - Um dos métodos mais primordiais para resolver problemas como o que você está apresentando, é tirar os parâmetros da consulta. Comece por aÃ.
3 - O SQLPlus é só um client, da mesma maneira que sua aplicação então você pode sim ter resultados diferentes da sua aplicação e do SQLPlus. Além disso, existem clients muito, mas MUITO melhores mesmo e gratuitos, como o Oracle SQL Developer
4 - Para ler dados, use o DataReader, mais especificamente, OracleDataReader.
5 - Os objetos de conexão, comando e leitor(respectivamente OracleConnection, OracleCommand e OracleDataReader), todos implementam IDisposable, portanto, devem ser usados em blocos Using
2 - Um dos métodos mais primordiais para resolver problemas como o que você está apresentando, é tirar os parâmetros da consulta. Comece por aÃ.
3 - O SQLPlus é só um client, da mesma maneira que sua aplicação então você pode sim ter resultados diferentes da sua aplicação e do SQLPlus. Além disso, existem clients muito, mas MUITO melhores mesmo e gratuitos, como o Oracle SQL Developer
4 - Para ler dados, use o DataReader, mais especificamente, OracleDataReader.
5 - Os objetos de conexão, comando e leitor(respectivamente OracleConnection, OracleCommand e OracleDataReader), todos implementam IDisposable, portanto, devem ser usados em blocos Using
KERPLUNK, já matou a barata no nº 1. Não precisava continuar pisando nela.
DifÃcil de acreditar, mas quem está começando à dar os primeiros passos agora, de algum modo está sendo orientado ao uso de tecnologias já consideradas pré-cambrianas. Se quer começar (ou recomeçar), sempre procurem pelo que há de mais novo, ou ao menos, pelo que é mais requisitado pelo mercado.
é realmente inacreditável a quantidade de pessoas que insistem, persistem e se obstinam em usar a OleDb, mesmo sabendo que estão pisando em ovos de codorna com botina militar. Estou desconfiando que há pessoas ou empresas vendendo a ideia de que basta fazer um curso VB6, que tem quase duas décadas de idade, para entrar na [Ô]área de informática[Ô]..
DifÃcil de acreditar, mas quem está começando à dar os primeiros passos agora, de algum modo está sendo orientado ao uso de tecnologias já consideradas pré-cambrianas. Se quer começar (ou recomeçar), sempre procurem pelo que há de mais novo, ou ao menos, pelo que é mais requisitado pelo mercado.
é realmente inacreditável a quantidade de pessoas que insistem, persistem e se obstinam em usar a OleDb, mesmo sabendo que estão pisando em ovos de codorna com botina militar. Estou desconfiando que há pessoas ou empresas vendendo a ideia de que basta fazer um curso VB6, que tem quase duas décadas de idade, para entrar na [Ô]área de informática[Ô]..
Vou descordar de certa forma.
Isso vai depender de qual Banco está usando e qual a finalidade da aplicação.
Não tem nada que impeça de usar a Oledb desde que forneça suporte.
Então, não é tão ruim.
Isso vai depender de qual Banco está usando e qual a finalidade da aplicação.
Não tem nada que impeça de usar a Oledb desde que forneça suporte.
Então, não é tão ruim.
Citação::
Vou descordar de certa forma.
Isso vai depender de qual Banco está usando e qual a finalidade da aplicação.
Não tem nada que impeça de usar a Oledb desde que forneça suporte.
Então, não é tão ruim.
Isso é verdade, porém, se existe um provider mais apropriado, porque não usar, não é mesmo?
Tópico encerrado , respostas não são mais permitidas