Jump to content

Recommended Posts

Posted

Boas

Na base de dados oracle, tenho o campo, neste caso que se chama geom, e tá em formato SDO_GEOMETRY, mas este formato não é reconhecivel no vb.net... alguem tem uma solução? É que eu tenho uma aplicação em vb, e por isso tou a fazer um insert atraves da aplicação e nao tou a conseguir...

Obrigado

Posted (edited)

Boas,

pelo que li, podes criar uma função na base de dados que te retorna os valores separados.

Exemplo:

https://community.oracle.com/thread/392689?start=0&tstart=0

Esquece, pelos vistos queres inserir e não ler

Neste post tens um exemplo de um projecto em C# que faz o insert.

Não deve ser complicado passar para vb.net

http://www.orafaq.com/forum/mv/msg/27794/296419/#msg_296419

Edited by nelsonr
Posted

Boas,

pelo que li, podes criar uma função na base de dados que te retorna os valores separados.

Exemplo:

https://community.oracle.com/thread/392689?start=0&tstart=0

Esquece, pelos vistos queres inserir e não ler

Neste post tens um exemplo de um projecto em C# que faz o insert.

Não deve ser complicado passar para vb.net

http://www.orafaq.com/forum/mv/msg/27794/296419/#msg_296419

ok obrigado vou ver esse site

Posted

Na base de dados oracle, tenho o campo, neste caso que se chama geom, e tá em formato SDO_GEOMETRY, mas este formato não é reconhecivel no vb.net

Se te estás a referir aos formatos suportados pelos comandos (command), não precisas de definir um tipo de dados para conseguires passar os dados da tua query por parâmetro. Precisas sim é que os dados que vais enviar estejam de acordo com esse campo da base de dados.

Exemplo prático:

Dim cmd As SqlCommand = New SqlCommand(query, connection)
With cmd.Parameters
.Add(New SqlParameter("@parametro_A", textbox1.Text))
.Add(New SqlParameter("@parametro_B", textbox2.Text))
End With
Posted

O codigo desse exemplo em vb fica assim:

Imports System.Data
Imports System.Collections.Generic
Imports System.Text
Imports Oracle.DataAccess.Client
Imports Geo

'minimal requirements
'Oracle 11.1 client
'odp.net release 11.1.0.6.20

' Oracle DDL
'create table geoinfo (id number(10) not null, geo mdsys.sdo_geometry );
'alter table geoinfo add primary key (id);
'create sequence geoinfo_seq;
'


Namespace ConsoleApplicationUdt
'geoinfo%rowtype -> GeoInfo
Public Class GeoInfo
Private m_id As Decimal
Public Property Id() As Decimal
Get
Return m_id
End Get
Set
m_id = value
End Set
End Property

Private m_geo As SdoGeometry
Public Property Geo() As SdoGeometry
Get
Return m_geo
End Get
Set
m_geo = value
End Set
End Property
End Class

Class Program
Private Shared Sub Main(args As String())
Using con As New OracleConnection("user id=scott;password=tiger;data source=ORA11")
con.Open()

Using cmd As New OracleCommand()
cmd.Connection = con
cmd.CommandType = CommandType.Text

'create parameter for insert SdoGeometry in table geoinfo
cmd.CommandText = " insert into geoinfo values (geoinfo_seq.nextval,:param) "
cmd.Parameters.Clear()
Dim oracleParameterGeo As New OracleParameter()
oracleParameterGeo.OracleDbType = OracleDbType.[Object]
oracleParameterGeo.UdtTypeName = "MDSYS.SDO_GEOMETRY"
cmd.Parameters.Add(oracleParameterGeo)

'creating point
Dim geoPoint As New SdoGeometry()
geoPoint.Sdo_Gtype = 2001
geoPoint.Point = New SdoPoint()
geoPoint.Point.X = 200
geoPoint.Point.Y = 400
oracleParameterGeo.Value = geoPoint

'insert point in table geoinfo
cmd.ExecuteNonQuery()

'creating polygon
Dim geoPolygon As New SdoGeometry()
geoPolygon.Sdo_Gtype = 2003
geoPolygon.ElemArray = New Decimal() {1, 1003, 1}
geoPolygon.OrdinatesArray = New Decimal() {3, 3, 3, 10, 10, 10, _
10, 3, 3, 3}
oracleParameterGeo.Value = geoPolygon

'insert polygon into table geoinfo
cmd.ExecuteNonQuery()

'select number(10),sdo_geometry into List
Dim geoInfoList As New List(Of GeoInfo)()

cmd.Parameters.Clear()
cmd.CommandText = " select id,geo from geoinfo "

Using readerGeoInfo As OracleDataReader = cmd.ExecuteReader()
While readerGeoInfo.Read()
Dim geoInfo As New GeoInfo()
If Not readerGeoInfo.IsDBNull(0) Then
geoInfo.Id = readerGeoInfo.GetDecimal(0)
End If
If Not readerGeoInfo.IsDBNull(1) Then
geoInfo.Geo = DirectCast(readerGeoInfo.GetValue(1), SdoGeometry)
End If
geoInfoList.Add(geoInfo)
End While
readerGeoInfo.Close()
End Using
End Using
con.Close()
End Using
End Sub
End Class
End Namespace

O problema é que me da sempre o erro na "SdoGeometry" diz que não tá declarado... não percebo pq

Posted

pois... continua a dar erro, agora bastantes... 38 erros... nao sei o que ei de fazer...

No entanto, experimentaste com o que o bioshock disse?

Epá eu nei sei se desse modo vai funcionar, mas vou tentar

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.