UPDATECOMMAND no funciona con dataset typado.

25/11/2005 - 16:27 por Ixabre | Informe spam
Hola amigos, tengo un problema con el comando UPDATECOMMAND que paso
a relataros por si alguna pudiera arrojarme alguna luz.

Tengo un dataset typado que relleno con un READXml con todo exito, a
continuación defino mi conexión, mi DataAdapter, un comando INSERT y un
comando UPDATE, el objeto de estas deficiones es que sincronize con mi base
de datos para que modifique o inserte segun convenga. Mi problema es que el
UPDATE siempre añade, a pesar de que el Dataset en memoria es diferente de
el de la base de datos, éste siempre me añade los registros en la tabla en
vez de modificarlos. No tengo ninguna clave definida en la base de datos,
aunque si en el dataset os paso aproximadamente el codigo:

GestorExportacion ge = new
GestorExportacion(); ->esquema


strConection= @"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\David\BD\XXXX.MDB" + ";Persist Security Info=False";

connExportacion=new
System.Data.OleDb.OleDbConnection(strConection);

connExportacion.Open();

daExportacion=new
System.Data.OleDb.OleDbDataAdapter("Select * FROM TABLA1",connExportacion);

daExportacion.MissingSchemaAction=MissingSchemaAction.AddWithKey;cmd
= new System.Data.OleDb.OleDbCommand("INSERT INTO TABLA1(Campo1, Campo2,
Campo3, Campo4, Campo5, Campo5, Campo5, Campo6, Campo7) VALUES (@Campo1,
@Campo2, @Campo3, @Campo4, @Campo5, @Campo6 @Campo7, @Campo8 @Campo9)",
connExportacion);

cmd.Parameters.Add("@Campo1",
System.Data.OleDb.OleDbType.LongVarChar, 25, "Indice");

cmd.Parameters.Add("@Campo2",
System.Data.OleDb.OleDbType.LongVarChar, 20, "Idioma");

cmd.Parameters.Add("@Campo3",
System.Data.OleDb.OleDbType.LongVarChar, 255, "Codigo1");

cmd.Parameters.Add("@Campo4",
System.Data.OleDb.OleDbType.LongVarChar, 255, "Text1");

cmd.Parameters.Add("@Campo5",
System.Data.OleDb.OleDbType.LongVarChar, 255, "Text2");

cmd.Parameters.Add("@Campo6",
System.Data.OleDb.OleDbType.LongVarChar, 255, "Text3");

cmd.Parameters.Add("@Campo7",
System.Data.OleDb.OleDbType.LongVarChar, 255, "Text4");

cmd.Parameters.Add("@Campo8",
System.Data.OleDb.OleDbType.LongVarChar, 255, "TipoAlta");

cmd.Parameters.Add("@Campo9",
System.Data.OleDb.OleDbType.Integer , 4, "NCopias");

daExportacion.InsertCommand = cmd;



ge.ReadXml(@"C:\David\XML\fichero.XML");

ge.ALTAS.DataSet.Tables["TABLA1"].PrimaryKey= new DataColumn[]
{ge.ALTAS.DataSet.Tables["TABLA1"].Columns["Campo1"]};

try

{

daExportacion.Update(ge.ALTAS.DataSet,"TABLA1");

}

catch(System.Exception e1)

{

Console.WriteLine(e1.Message);

}



¿Alguna sugerencia o codigo que funcione con codigo typado?.



Gracias amigos por adelantado.



David





Gra
 

Leer las respuestas

#1 mianrube
25/11/2005 - 20:43 | Informe spam
Creo que el problema puede ser el siguiente:

Al no estableces una clave primaria en la tabla de la base de datos, si
creas de modo visual un DataSet con su correspondiente TableAdapter, éste
último no va a crear correctamente los comandos de inserción, borrado y
actualización. Comprueba si este es el caso haciendo doble click sobre el
objeto DataSet en el explorador de soluciones, te aparecerá el archivo .xsd
correspondiente, que no es ni mas ni menos que una representación visual del
DataSet y de las operaciones del TableAdapter. A continuación pulsa sobre el
título de la tabla nombrado con xxxTableAdapter, donde xxx es el nombre de tu
tabla, en el panel de propiedades podras observar si los comandos CRUD se han
creado correctamente, si en algúno de los casos aparece none, entonces
deberas arreglarlo para que funcione bien.

Espero que sea esto lo que buscabas, un saludo.
mastermind


"Ixabre" escribió:



Hola amigos, tengo un problema con el comando UPDATECOMMAND que paso
a relataros por si alguna pudiera arrojarme alguna luz.

Tengo un dataset typado que relleno con un READXml con todo exito, a
continuación defino mi conexión, mi DataAdapter, un comando INSERT y un
comando UPDATE, el objeto de estas deficiones es que sincronize con mi base
de datos para que modifique o inserte segun convenga. Mi problema es que el
UPDATE siempre añade, a pesar de que el Dataset en memoria es diferente de
el de la base de datos, éste siempre me añade los registros en la tabla en
vez de modificarlos. No tengo ninguna clave definida en la base de datos,
aunque si en el dataset os paso aproximadamente el codigo:

GestorExportacion ge = new
GestorExportacion(); ->esquema


strConection= @"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\David\BD\XXXX.MDB" + ";Persist Security Info=False";

connExportacion=new
System.Data.OleDb.OleDbConnection(strConection);

connExportacion.Open();

daExportacion=new
System.Data.OleDb.OleDbDataAdapter("Select * FROM TABLA1",connExportacion);

daExportacion.MissingSchemaAction=MissingSchemaAction.AddWithKey;cmd
= new System.Data.OleDb.OleDbCommand("INSERT INTO TABLA1(Campo1, Campo2,
Campo3, Campo4, Campo5, Campo5, Campo5, Campo6, Campo7) VALUES (@Campo1,
@Campo2, @Campo3, @Campo4, @Campo5, @Campo6 @Campo7, @Campo8 @Campo9)",
connExportacion);

cmd.Parameters.Add("@Campo1",
System.Data.OleDb.OleDbType.LongVarChar, 25, "Indice");

cmd.Parameters.Add("@Campo2",
System.Data.OleDb.OleDbType.LongVarChar, 20, "Idioma");

cmd.Parameters.Add("@Campo3",
System.Data.OleDb.OleDbType.LongVarChar, 255, "Codigo1");

cmd.Parameters.Add("@Campo4",
System.Data.OleDb.OleDbType.LongVarChar, 255, "Text1");

cmd.Parameters.Add("@Campo5",
System.Data.OleDb.OleDbType.LongVarChar, 255, "Text2");

cmd.Parameters.Add("@Campo6",
System.Data.OleDb.OleDbType.LongVarChar, 255, "Text3");

cmd.Parameters.Add("@Campo7",
System.Data.OleDb.OleDbType.LongVarChar, 255, "Text4");

cmd.Parameters.Add("@Campo8",
System.Data.OleDb.OleDbType.LongVarChar, 255, "TipoAlta");

cmd.Parameters.Add("@Campo9",
System.Data.OleDb.OleDbType.Integer , 4, "NCopias");

daExportacion.InsertCommand = cmd;



ge.ReadXml(@"C:\David\XML\fichero.XML");

ge.ALTAS.DataSet.Tables["TABLA1"].PrimaryKey= new DataColumn[]
{ge.ALTAS.DataSet.Tables["TABLA1"].Columns["Campo1"]};

try

{

daExportacion.Update(ge.ALTAS.DataSet,"TABLA1");

}

catch(System.Exception e1)

{

Console.WriteLine(e1.Message);

}



¿Alguna sugerencia o codigo que funcione con codigo typado?.



Gracias amigos por adelantado.



David





Gra



Preguntas similares