Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   .NET (http://www.forosdelweb.com/f29/)
-   -   Que foro mas soso!!! (http://www.forosdelweb.com/f29/que-foro-mas-soso-109732/)

moncherote 03/01/2003 03:08

Que foro mas soso!!!
 
Es que a nadie le da por el .net o que????
somos muchos los ignorantes y muy pocos los maestros..... :-p

Pos bueno, a los que vamos :

Me he creado un servicio web para acceder a traves de el con otra aplicacion a una base de datos. Esto, esta claro lo he hecho con un codigo que me encontre en la pagina de microsoft. :borracho:

Lo que pasa es que la base de datos no es SQL Server ni access y no se como hacer que se me conecte a una bd de 'Adabas D'.
Lo que me falla es el proveedor, creo. Alguien sabe algo????
:neurotico :'( Me urge, plis!!!!!!!!

:ojotes:

misitioweb 08/01/2003 14:46

Busca en la pagina web de la compañia que hace esa base de datos por los controladores odbc..... y asi podras usarla sin problemas...

Saludos....

vgaray 08/01/2003 15:18

Saludos.

Aquí http://www.attunity-inc.com/adabas_d.htm podrás obtener los drivers.

moncherote 13/01/2003 03:44

gracias!
 
Gracias tios, pero creo q me explique mal :

El driver odbc lo tengo, y tambien odbc.net, y lo que me fallaba era la conexion . Pos bien, ya conecté y solo me queda poder usar los datos de la consulta, ya que al intentar ponerlo en en datagrid o asi me falla, pero ya es otro tema que voy a mirar y ya pongo por aqui el código. :arriba:

moncherote 13/01/2003 04:35

aqui esta el codigo !!
 
Ahi os va:

error:

Excepción no controlada del tipo 'Microsoft.Data.Odbc.OdbcException'
en microsoft.data.odbc.dll

Información adicional: Error del sistema.

codigo:

Imports Microsoft.Data.Odbc ...
...
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

Dim strConnectionString As String
strConnectionString = "dsn=BD;uid=pppp;pwd=pp;"
Dim pConn As New OdbcConnection(strConnectionString)
Dim pInsertQuery As String = "SELECT * FROM pais"
Dim adapter As New OdbcDataAdapter(pInsertQuery, pConn)
Dim paises As DataSet = New DataSet()
adapter.Fill(paises, "pais") ' ***aqui me falla***
DataGrid1.SetDataBinding(paises, "pais")
DataGrid1.Show()

End Sub

Me da ese error en el adapter. Parece que conecta bien, y hace la sql, pero me peta al acceder a los datos, no??? :ojotes:

jlchavez 16/01/2003 22:19

Deberas revisar la instalación de los drivers ODBC de esa base de datos que estas usando, ya que esta disparo un error y el ODBC.Net no pudo controlar el error. El mensaje de el error es demasiado generico como para saber con exactitud donde esta la falla.

En caso remoto se podria determinar con mayor precisión si es que se ejecuto y que no pudo obtener la data, viendo el "stack" completo de las llamadas internas, por que solo has colocado un pedazo del codigo y el titulo del error. El stack es la mejor herramienta para saber por donde esta la falla.

moncherote 20/01/2003 03:07

Es que no lo entiendo!!!!!!

Pero si con el VB6 conectaba de p... madre con esta base de datos, y con este ejemplo el access va como un tiro!!!!

Que le pasa al puñetero odbc.

Ahh, y de que va eso del stack, que soy novato y no menterao todavia.

P.D. : el codigo esta todo, no falta nada importante

jlchavez 20/01/2003 08:50

Pues como este es un código administrado, algo a de estar mal en el driver de odbc, que le resulta error al odbc de .net

El stack es lo mas viejo que existe, es la pila de punteros de los procedimientos que van llamando unos a otros.

Supongamos un procedimiento main, llama a showstats, y showstats a setvideo, la pila (stack) se vería así:

setvideo(...)
showstats(...)
main(...)

Por default las opciones de debug muestran la pila para saber la ruta y de que punto podria derivarse el error.

Intenta cambiando "odbc" por "OleDb", es otra libreria y te debe de funcionar igual.

moncherote 21/01/2003 03:13

Una consulta
 
Como veo que le controlas del .net, me gustaria consultarte algo :

Es verdad que el acceso a datos mediante odbc viene capado, osea, que he oido ( de cierto energumeno que espero no tenga razon) que el acceso odbc solo esta probado para motores sql server, oracle y jet .

Que yo haya leido , dentro de lo que es ADO, sqlserver y oracle tienen su propio acceso a datos , y luego se puede acceder a las demas con oledb u odbc.

Yo intento acceder a un BD adabasD mediante odbc, y me casca, y va el tio y como falla me dice que el acceso mediante odbc ya no se va a usar mas, que tiene que ser oledb.

Y porque no puedo rechistar, que es el de arriba mio (usease boss), a si que a ver si me ayudas, que yo aunque le enseño el manual de .net donde lo pone el me dice que no (y eso que no sabe programar en visual basic)

:pensando:

jlchavez 21/01/2003 08:39

Ya investigue un poco. Según lo que leí la forma original de manejar y conectarse bajo Windows, era usando ODBC. Esta es una interface estandar entre la aplicación y el driver de acceso a la base de datos X, compatibles con los estandares ANSI SQL. Buscando expandir el tipo de archivos o datos que se puedan accesar, como por ejemplo archivos de texto, se creo OLE DB.

.Net framework presenta 2 librerias:

System.Data.OleDb y
System.Data.SqlClient

adicionalmente se puede descargar

System.Data.OracleClient

SqlClient y OracleClient son de acceso especifico, incluyendo las ventajas de cada controlador (driver). OleDb, es utilizando esa expansión, y es una interfase de acceso mas estandar. OleDb te permite el acceso usando un "Provider" X, utilizando una cadena de conección donde especifique el nombre del driver. De ahí ciertas ventajas que provee el OleDb que se prefiere este. El ODBC no es que este bloqueado, es mas que OleDb, es otra metodología de acceso y si un controlador no viene preparado para ambos, no funcionara.

ADO (Access Data Objects), es lo mismo que OleDb, muchos drivers ODBC se puede utilizar con OleDb, pero esto depende de la construcción de los mismos.

Este es un buen artículo que en la introducción te explica esto: http://msdn.microsoft.com/library/de...asp?frame=true

Ademas te introduce a como crear proveedores especificos, así como el "SqlClient". Mas creo que este no seria tu objetivo.

Para usar ODBC deberías utilizar, este otro: "ODBC .Net Data Provider", lo podes descargar de: http://msdn.microsoft.com/downloads/...xml&frame=true

Parece que tu jefe, le ha atinado per mas por suerte que por base de conocimiento, pero quien sabe talvez encontro algo en internet que lo explica.

moncherote 22/01/2003 06:08

A ver si me centro
 
El caso es :

- Ya tenia bajado el odbc .net :arriba:

- Siempre conecte mediante ODBC a bases de datos AdabasD, siempre me parecio lo mas sencillo y lo que me dio menos problemas(por no decir ninguno). :-D

-Ahora llega el .NET y puedo conectarme, pero no se como acceder a los datos de la sql. :molesto:

- Viene el boss y me dice : "eres mu torpe (puede ser...) , la conexion ODBC no es ADO, tienes que hacer ADO. ADO es OLEDB. El ODBC no sirve para las BD que no sean de microsoft u oracle." :cantar: :patada: :golpeado:

- El articulo en ingles debe estar bien, gracias por recomendarmelo, pero lo va a leer San Pedro (perdona :-( , pero me lia mas todavia). :neurotico :roto:

Yo lo que quiero es saber lo siguiente:

- Que diferencias en cuanto a acceso a datos hay entre VB6 y .NET :decabeza:

- Porque ODBC ya no es una via tan fiable, si es universal. Es que los de microsoft estan tontos o que!!!!!

- Y ultimo, queria decir algo mas, pero ya no me acuerdo, vale!!!

PD : jlchavez, muchas gracias por todo. ;-) :arriba:

jlchavez 22/01/2003 08:36

Ahhhh ahora ya entendi que te hace falta jeje :arriba:

La forma de acceso a datos ya no es en un flujo directo desde la base de datos, hasta el código, si usas el DataAdapter. Le denominan "disconected recordset", por que se ejecuta el DataAdapter que lee todos los resultados de la base de datos y te quedan en una sola colección en memoria, un DataSet.

Pongamos un ejemplo: (yo programo en C#, solo sera de reescribirlo en VB)

Cita:

OleDbConnection Con1 = new OleDbConnection("...");
OleDbDataAdapter DataA1 = new OleDbDataReader("Select * from emp",Con1);
DataSet ds1 = new DataSet();
DataA1.fill(ds1,"Datos");
La primera linea utilizara en lugar de "..." el string de conección.

La segunda crea un Adaptador que se encarga de ejecutar los queries a la BD.

La tercera se crea un DataSet que almacenaro los datos.

La cuarta es el Adaptador que se le indica que llene el DataSet con una tabla llamada "Datos", esos datos provienen del query string de la segunda línea.

Para accesar los datos:

Cita:

DataTable dt1 = ds1.Tables["Datos"]
DataTable tiene dos objetos "Rows", y "Columns". Rows es un DataRowCollection, con todos los registros que se obtuvieron de la base de datos. Columns es un DataColumnCollection que contiene el listado de todas las columnas que devolvio el query.

Cita:

dt1.Rows.Count
Esto te devuelve el número de registros obtenidos.

Cita:

dt1.Columns.Count
El número de columnas.

Los resultados los podes accesar de la siguiente forma:

Cita:

DataRow drtemp = dt1.Rows[0]
object col1 = drtemp[0]
DataRow ya es la collección de datos de un registro devuelto. El DataRowCollection posee un indice ([n]) para poder accesar en orden los registros, de ahí que en la primera línea de este último bloque de código se obtiene un registro, el primero (0, indices que inician en 0). En la segunda línea se obtiene la primer columna de los resultados (drtemp[0]).

Para volver estos registros en el tipo correcto, podemos usar lo siguiente:

Cita:

string nombre_emp = drtemp[0].ToString();
float sueldo = Convert.ToFloat(drtemp[1].ToString());
float sueldo2 = (float)drtemp[1];
Supongamos que vamos a mostrar todos los nombres de empleados:

Cita:

OleDbConnection Con1 = new OleDbConnection("...");
OleDbDataAdapter DataA1 = new OleDbDataReader("Select name from emp",Con1);
DataSet ds1 = new DataSet();
DataA1.fill(ds1,"Datos");
int c = 0;
foreach (DataRow drtemp in ds1.Tables["Datos"].Rows) {
Response.Write(String.Format("[{0}] {1}",c++,drtemp["name"]);
}
o
Cita:

OleDbConnection Con1 = new OleDbConnection("...");
OleDbDataAdapter DataA1 = new OleDbDataReader("Select name from emp",Con1);
DataSet ds1 = new DataSet();
DataA1.fill(ds1,"Datos");
int c = 0;
foreach (DataRow drtemp in ds1.Tables["Datos"].Rows) {
Response.Write(String.Format("[{0}] {1}",c++,drtemp[0]);
}
El resultado en la página sera:

Cita:

[0] Scott
[1] Tomas
[2] Cristine
Esta es una de las formas rápidas de accesar datos, sin tanta programación y preocupación, pero también existe el DataReader, para procesar los datos sin requerir del DataAdapter como una capa intermedia.

moncherote 23/01/2003 02:43

ok !!!
 
Solo tengo un problema con el oledb :

- Como consigo la cadena de conexion para AdabasD?????
Necesito el provider , no?? Tengo ejemplos de varios en
http://www.connectionstrings.com/ ,

pero ya no se que ponerle a AdabasD. :'(
(Bendito ODBC)

Un millon!!! :arriba: ;-)

moncherote 23/01/2003 05:53

Estoy mas tranquilo!!!
 
Encontre esto por internet y ya no me siento tan burro como hace poco :

Cita:

Objetos ADO

OBJETO CONNECTION:- OBJETO QUE SE UTILIZA PARA ESTABLECER UNA CONECCION O ENLACE A LA BASE DE DATOS.
Este objeto primero se tendra que crear en el programa y luego se tendra que cargar con dos parametros (ver ejemplo mas abajo), el primer parametro es el provedor o la fuente que proporcionara los datos, los provedores o fuentes de datos que existen son:

SQLSERVER NET DATA PROVIDER.- QUE SE ESPECIALIZA EN COMUNICARSE Y PROCESAR BASES DE DATOS CONSTRUIDAS CON MICROSOF SQL SERVER V7.0

OLEDB.NET DATA PROVIDER.- QUE SE ESPECIALIZA EN COMUNICARSE Y PROCESAR BASES DE DATOS QUE A LA FECHA DEL PRESENTE LIBRO UTILIZEN ALGUNOS DE LOS SIGUIENTES DRIVERS , SQLOLEDB ( VERSIONES ANTERIORES DE SQL SERVER DE MICROSOFT), MSDAORA (ORACLE), MICROSOFT.JET ( ACCESS Y ALGUNOS OTROS DBMS DE MICROSOFT)

ODBC.NET .- BASES DE DATOS QUE USAN ODBC COMO MEDIO DE COMUNICACION CON OTRAS BASES DE DATOS Y APLICACIONES, COMO NOTA A CONSIDERAR ODBC.NET NO ESTA INCLUIDA POR DEFAULT EN MICROSOFT.NET, SE TIENE QUE BAJAR DE MICROSOFT.

etc ........
Pos eso, que lo que viene capado es el oledb (solo microsoft y oracle) y no el odbc (pa todo dios) :-D :cantar: :arriba: :borracho:

jlchavez 23/01/2003 09:40

Ya encontre donde esta el problema:

1 - Quien crea el driver OleDb debe proveer cual es el nombre del provider.

2 - Solo funcionan los providers que provean ciertas interfaces, y solo hay para

SQL - SQLOLEDB
Oracle - MSDAORA
Access - Microsoft.Jet.OLEDB.4.0

Si encuentro algo mas te aviso, estoy rastreando para ver como sabe el sistema cuales son los controladores OleDb que estan instalados, así tal vez encuentre la ubicación estandar y nombres de providers.

jlchavez 23/01/2003 09:56

Los drivers ODBC solo se pueden utilizar con el ODBC .NET Data Provider.

Cita:

The "Provider = value " clause is required. However, you cannot use "Provider = MSDASQL" because the OLE DB .NET Data Provider does not support the OLE DB Provider for ODBC (MSDASQL). For access to ODBC data sources, an ODBC .NET Data Provider is available as a separate download at http://msdn.microsoft.com/downloads.
Como podemos ver aquí los proveedores OleDb para ODBC no son compatibles, para poder conectarte tendrian que ser controladores especificos para OleDB y que cumplan con los requerimientos básicos de interfaces del controlador, que son:

Cita:

OLE DB Services
-----
IDataInitialize
-----
DataSource IDBInitialize
IDBCreateSession
IDBProperties
IPersist
IDBInfo*

Session
-----
ISessionProperties
IOpenRowset
IDBSchemaRowset*
ITransactionLocal*
IDBCreateCommand*
Command ICommandText
ICommandProperties
ICommandWithParameters*
IAccessor (only required if ICommandWithParameters is supported)
ICommandPrepare*

MultipleResults
-----
IMultipleResults

RowSet
-----
IRowset
IAccessor
IColumnsInfo
IColumnsRowset*
IRowsetInfo (only required if DBTYPE_HCHAPTER is supported)

Row
-----
IRow*

Error
-----
IErrorInfo
IErrorRecords
ISQLErrorInfo*

* indicates an optional interface

moncherote 23/01/2003 11:43

fffiiiuuuuuu!!!!!!!!
 
:ojotes: ¡¡¡mima que pasote!!!

Necesitaré dos dias para asimilar tanta información.

tenkiu !!! :arriba:

jlchavez 23/01/2003 11:50

Denankiu! :-D

moncherote 04/02/2003 06:45

po ya ta!!!
 
Muchas gracias men!!!! Pero ... Ya me salió!!! :borracho: :-D :risa:

Le dije al pringao este que era que la version del driver odbc para adabas no era compatible, que habia que actualizarlo. :pensando: :risa:

Pues bien, aunque me lo negaba, accedio a probar y..... :patada: :golpeado:

Tachaaaannnn!!!! Como un tiro!!! Se le quedo cara de jili al ver que tenia yo razón. :roto:

Por cierto, la version que no rula es la v10, de la v11 para arriba va bien, por si alguien lo necesita. :-D :cool:


La zona horaria es GMT -6. Ahora son las 06:41.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.