[VB.NET/ODP.NET] parameter query

Pagina: 1
Acties:

  • Bats
  • Registratie: Oktober 2000
  • Laatst online: 30-01 19:14
Hallo,

Bij het gebruik van parameter query hoef je bij OO4O je parameters niet in de zelfde volgorde te declareren als dat je de placeholders in je query gebruikt. In .NET gebruik ik nu ODP.NET van oracle nu lijkt het alsof je daarbij je parameters wel in de zelfde volgorde moet gebruiken als je placeholders.

Hoe zit het nou.
- Doe ik iets fout
- Klopt het dat je net als bij OleDbClient op volgorde moet declareren (Waarom zou oracle in OO4O dit wel ondersteunen in in ODP.NET niet)
- Waarom houd hij dan wel rekening met de 3e placeholder.

Dim oParameter As New OracleParameter

oParameter = New OracleParameter
oParameter.Value = dDatum
oParameter.ParameterName = "p_peildatum"
oParameter.OracleDbType = OracleDbType.Date
oParameter.Direction = ParameterDirection.Input
cmd.Parameters.Add(oParameter)

oParameter = New OracleParameter
oParameter.OracleDbType = OracleDbType.Int64
oParameter.Value = CInt(Criteria.verzekerde.identificatienummer)
oParameter.Direction = ParameterDirection.Input
oParameter.ParameterName = "p_identnr"
cmd.Parameters.Add(oParameter)


Wanneer ik nu deze query gebruik gaat alles goed
"SELECT * " + _
"FROM vcov " + _
"WHERE vcov_ident_nr = :p_identnr " + _
"AND vcov_dekking_tm = :p_peildat"

Error: geen error

Wanneer ik nu de ident en de dekking omdraai werk het niet meer.
"SELECT * " + _
"FROM vcov " + _
"WHERE vcov_dekking_tm = :p_peildat" + _
"AND vcov_ident_nr = :p_identnr "

Error :Database error: ORA-00932: inconsistent datatypes: expected DATE got NUMBER

Wanneer ik nu nogmaals de identnr gebruik, als een 3e placeholder, ookal heb ik maar 2 parameters gedeclareerd.
"SELECT * " + _
"FROM vcov " + _
"WHERE vcov_ident_nr = :p_identnr " + _
"AND vcov_dekking_tm = :p_peildat " + _
"AND vcov_poln = :p_identnr"

Error: geen error

Verder heb ik nog andere combinaties geprobeerd. Denk niet dat deze relevant zijn.

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Je wilt misschien je datum omvangen met hekjes?

ik ken die syntaxis niet, dus kan geen codevoorbeeld geven, maar ik bedoel "#" & datum & "#".

Gebruik ook liever de ampersand (&) om strings samen te voegen in plaats van met een plus.

EDIT:

"AND vcov_dekking_tm = :p_peildat "

wordt dus

"AND vcov_dekking_tm = #:p_peildat# "

Of zo?

"AND vcov_dekking_tm = :p_#peildat# "

Probeer dat eens?

Is die peildat een variabele, of is het hele stuk :p_peildat de variabelenaam?

[ Voor 39% gewijzigd door CodeCaster op 05-04-2005 16:37 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Bats
  • Registratie: Oktober 2000
  • Laatst online: 30-01 19:14
p_peildat is de placeholder voor de parameter.
Je hebt de ":" ervoor nodig om aan te geven dat het om een placeholder gaat in Oracle.

Wanneer ik zoals in het vorige voorbeeld de placeholders in de zelfde volgorde staan alsdat ze gedeclareerd zijn. Heb je geen last van een datum probleem. Daarom zou de "#" ook niet nodig zijn.

dDatum =


Dim dDatum As DateTime
dDatum = New DateTime
dDatum = CDate(CStr(Criteria.peildatum.dag) & "/" & _
CStr(Criteria.peildatum.maand) & "/" & _
CStr(Criteria.peildatum.jaar))


En ik ben het ermee eens maar dat is een ander onderwerp, strings worden gekoppeld dmv een "&".
Wou alleen kijken hoe het zou worden als ik een heel project op de andere manier ("+") schreef. Dit bevalt mij niet en ik zal voordat ik een full compile geef alle "+" (die als koppeltekens worden gebruikt) nog vervangen.

  • EfBe
  • Registratie: Januari 2000
  • Niet online
ODP.NET gebruikt standaard de setting dat je de parameters in de juiste volgorde moet plaatsen. Je kunt echter OracleCommand.BindByName op true zetten, dan hoef je dat niet te doen. Zie voor meer details de ODP.NET docs omtrent OracleCommand.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com