killerbest Posted May 14, 2014 at 09:51 AM Report #555550 Posted May 14, 2014 at 09:51 AM 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
nelsonr Posted May 14, 2014 at 09:56 AM Report #555552 Posted May 14, 2014 at 09:56 AM (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 May 14, 2014 at 10:00 AM by nelsonr
killerbest Posted May 14, 2014 at 10:17 AM Author Report #555561 Posted May 14, 2014 at 10:17 AM 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
bioshock Posted May 14, 2014 at 10:27 AM Report #555565 Posted May 14, 2014 at 10:27 AM 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
killerbest Posted May 14, 2014 at 01:18 PM Author Report #555599 Posted May 14, 2014 at 01:18 PM 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
nelsonr Posted May 14, 2014 at 01:38 PM Report #555602 Posted May 14, 2014 at 01:38 PM O SdoGeometry é uma class que está criada no ficheiro SdoGeometry.cs
killerbest Posted May 14, 2014 at 01:42 PM Author Report #555603 Posted May 14, 2014 at 01:42 PM O SdoGeometry é uma class que está criada no ficheiro SdoGeometry.cs ok vou ver então
nelsonr Posted May 14, 2014 at 01:43 PM Report #555605 Posted May 14, 2014 at 01:43 PM No entanto, experimentaste com o que o bioshock disse?
killerbest Posted May 14, 2014 at 01:55 PM Author Report #555609 Posted May 14, 2014 at 01:55 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now