MISTÉRIO NO VB.NET COM ORACLE

MARCOS 28/12/2016 10:36:01
#470122
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.

OMAR2011 28/12/2016 11:14:14
#470123
Banco,tabela tudo bem.
Onde está a escrita do código?
JCM0867 28/12/2016 11:24:52
#470125
Usa a versão gratuita do Oracle, ele suporta no máximo 10Gb. Não seria alguma limitação a causa do problema?
MARCOSLING 28/12/2016 13:19:15
#470130
As configurações da conexão são as mesmas?
MARCOS 28/12/2016 16:44:59
#470139
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
MARCOSLING 28/12/2016 17:11:26
#470141
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
OMAR2011 28/12/2016 19:07:10
#470145
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
KERPLUNK 28/12/2016 23:53:54
#470153
Resposta escolhida
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
PROFESSOR 29/12/2016 08:42:22
#470162
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[Ô]..
OMAR2011 29/12/2016 10:06:17
#470165
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.
MARCOSLING 29/12/2016 13:43:22
#470167
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