Wrox Home  
Search P2P Archive for: Go

  Return to Index  

aspx_espanol thread: Problema con ADO.NET


Message #1 by "Diego Alejandro Palmeira" <dpalmeira@s...> on Wed, 12 Feb 2003 23:19:23 +0100
Gracias Matias, agregue esas 2 l=EDneas
oCB.QuotePrefix =3D "["
oCB.QuoteSuffix =3D "]"

y funciono de primera!

Mil Gracias
Salu2 ;)

-----Original Message-----
From: Matias Woloski [mailto:woloski@s...]
Sent: Thursday, February 13, 2003 1:58 AM
To: ASP.Net en Espa=F1ol
Subject: [aspx_espanol] RE: Problema con ADO.NET

Diego,

Una manera de debugear este tipo de funcionalidad (CommandBuilder) es
chequeando que genera el command builder
Para esto utiiza
GetInsertCommand/GetUpdateCommand/GetDeleteCommand, junto con
Trace.Write para imprimirlo

Por otro lado, me parece que el problema esta en que tu tabla contiene
campos que son palabras reservadas, por la tanto habria que encerrarlas
en corchetes "[ ]". Para lograr esto con el CommandBuilder es necesario
setear las propiedades QuotePrefix y QuoteSuffix

Asi quedaria tu codigo
oCB =3D New OleDbCommandBuilder(oDA)
oCB.QuotePrefix =3D "["
oCB.QuoteSuffix =3D "]"


Matias


> -----Original Message-----
> From: Diego Alejandro Palmeira [mailto:dpalmeira@s...]
> Sent: Mi=E9rcoles, 12 de Febrero de 2003 07:19 p.m.
> To: ASP.Net en Espa=F1ol
> Subject: [aspx_espanol] Problema con ADO.NET
>
>
> Hola listeros, tengo un problema que me esta volviendo loco
> con ADO.NET
>
> Resulta que tengo en una clase (en la DAL), es decir en la
> parte que graba el objeto en una base de datos (en este caso
> Access 2000), un problema al querer grabar el estado del mismo.
>
> Este es el C=F3digo en VB.Net para grabar el estado del objeto
> en el DB, que es el que tiene problemas...
>
>     Private Sub Save()
>         Dim oDA As OleDbDataAdapter
>         Dim oDS As New DataSet()
>         Dim oDRow As DataRow
>         Dim oCB As OleDbCommandBuilder
>         Dim strSQL As String
>
>         If blnNew Then
>             strSQL =3D "SELECT * FROM " & kTABLE
>             oDA =3D New OleDbDataAdapter(strSQL, objDBAccess.db)
>         Else
>             strSQL =3D "SELECT * FROM " & kTABLE & " " & _
>                      "WHERE DataSourceID=3D" & udtProps.DataSourceID
>             oDA =3D New OleDbDataAdapter(strSQL, objDBAccess.db)
>         End If
>         oDA.Fill(oDS, kTABLE)
>         If blnNew Then
>             oDRow =3D oDS.Tables(kTABLE).NewRow()
>         Else
>             oDRow =3D oDS.Tables(kTABLE).Rows(0)
>         End If
>         With oDRow
>             .Item("UserID") =3D udtProps.UserID
>             .Item("Name") =3D udtProps.Name
>             .Item("DBServer") =3D udtProps.DBServer
>             .Item("DBSource") =3D udtProps.DBSource
>             .Item("LoginName") =3D udtProps.LoginName
>             .Item("Password") =3D udtProps.Password
>             .Item("Enabled") =3D udtProps.Enabled
>             If blnNew Then
>                 .Item("CreationDate") =3D Now()
>                 oDS.Tables(kTABLE).Rows.Add(oDRow)
>             End If
>         End With
>         oCB =3D New OleDbCommandBuilder(oDA) <---- esto se
> supone que me endria que construir el INSERT correctamente y
> automaticamente.
>         oDA.Update(oDS, kTABLE)  <-------- aqui me da el error !!!!
>
>         oDA.Dispose()
>         oDS.Dispose()
>         oCB.Dispose()
>         oDRow =3D Nothing
>         oDA =3D Nothing
>         oDS =3D Nothing
>         oCB =3D Nothing
>     End Sub
>
> El error es el siguiente:
> Additional information: Syntax error in INSERT INTO statement.
>
> Por lo que pude deducir, se supone que el
> OleDbCommandBuilder, me construye automaticamente la
> sentencia INSERT para el DataSet y el DataRow que tengo
> definido y cargado. Lo extra=F1o es que me de un error cuando
> estoy haciendo lo mismo que un ejemplo (es decir en la
> secuencia de c=F3mo se hace) que baje de internet.
>
> Algunas ayudas
> kTABLE =3D es una constante que tiene el nombre de la tabla.
> objDBAccess.db =3D devuelve un puntero al objeto conexi=F3n al
> DB, eso funciona porque en otro procedimiento que es para
> leer y cargar los datos del objeto funciona sin problemas.
> blnNew =3D es un flan que indica si el objeto a grabar es nuevo
> o no, es decir si hay que INSERTAR o hacer un UPDATE del
> registro que guarda el estado en la DB, pero supongamos que
> es siempre "nuevo", ya que ah=ED es donde tengo el problema
> inicialmente, la otra posibilidad no la prob=E9 todav=EDa.
>
> Bueno, en resumidas cuentas utilizo un DataAdapter, un
> DataSet, un DataRow y un CommandBuilder que deber=EDan insertar
> un nuevo registro en una tabla simple de Access.
>
>
> Como podr=EDa darme cuenta o leer lo que quiere INSERTAR para
> ver si esta armando bien la sentencia INSERT ???
>
> Si desde la ventana Command Window, hago
> ? ocb.GetInsertCommand justo despu=E9s de correr la l=EDnea:
> oCB =3D New OleDbCommandBuilder(oDA)
>
> me devuelve esto:
>
> >? ocb.GetInsertCommand
> {System.Data.OleDb.OleDbCommand}
>     System.ComponentModel.Component: {System.Data.OleDb.OleDbCommand}
>     cmdConnection: {System.Data.OleDb.OleDbConnection}
>     transaction: Nothing
>     cmdParameters: {System.Data.OleDb.OleDbParameterCollection}
>     cmdText: "INSERT INTO DataSources( UserID , Name ,
> DBServer , DBSource , LoginName , Password , Enabled ,
> CreationDate ) VALUES ( ? , ? , ? , ? , ? , ? , ? , ? )"
>     cmdType: Text
>     updatedRowSource: None
>     commandTimeout: 30
>     icommandText: Nothing
>     handle_Accessor: 0
>     commandBehavior: Default
>     dbBindings: Nothing
>     canceling: False
>     isPrepared: False
>     executeQuery: False
>     computedParameters: False
>     designTimeVisible: False
>     cmdState: 0
>     recordsAffected: 0
>     CommandText: "INSERT INTO DataSources( UserID , Name ,
> DBServer , DBSource , LoginName , Password , Enabled ,
> CreationDate ) VALUES ( ? , ? , ? , ? , ? , ? , ? , ? )"
>     CommandTimeout: 30
>     CommandType: Text
>     Connection: {System.Data.OleDb.OleDbConnection}
>     DesignTimeVisible: True
>     IsClosed: True
>     Parameters: {System.Data.OleDb.OleDbParameterCollection}
>     Transaction: Nothing
>     UpdatedRowSource: None
>
> Lo que no se es si la sentencia INSERT aparece as=ED con los
> signos ?,?,?, porque todav=EDa no corr=ED la l=EDnea que me da el
> error : oDA.Update(oDS, kTABLE), o porque esta mal.
>
> Bueno cualquier ayuda ser=E1 bienvenida y MIL GRACIAS !!!
>
>
> ---
> Usted est=E1 suscrito a aspx_espanol como:
> woloski@s...
> Para darse de baja, env=EDe un mensaje en blanco a
> %%email.unsub%%
>
>


---
Usted est=E1 suscrito a aspx_espanol como:
dpalmeira@s...
Para darse de baja, env=EDe un mensaje en blanco a
%%email.unsub%%



  Return to Index