Por Favor quien tiene algo implementado de esta forma ?.
Necesito una soga con este tema.
Probé varias cosas de la Web y ningúna me funciona.
Por favor.
Atte. Daniel.
Bueno, son dos temas totalmente independientes: Por una parte está la
pregunta de cómo se serializa un objeto para dar lugar a XML. Para esto se
puede usar la clase XmlSerializer.
El segundo problema sería cómo llamar a un procedimiento almacenado
pasándole un parámetro (que en este caso sería el XML pero a efectos de
hacer la llamada desde C# daría igual que fuera cualquier otro tipo de
información). Para esto se usa un SqlCommand junto con un SqlParameter.
¿Con cuál de las dos partes estás atascado? ¿Puedes concretar un poco más
en dónde encuentras la dificultad?
public class MiClaseSerializable
{
public string strNombre;
public string strApellido;
public void MostrarNombre()
{
MessageBox.Show(" Nombre " + strNombre + " Apellido " + strApellido);
}
}
de allí tengo otro pedazo de codigo que instancia un objeto de esa clase, lo serializa e intenta enviarlo como parametro tipo SQLXML.
DataSet DatosProyecto = new DataSet();
SqlConnection conConexionSQL = new SqlConnection("Data Source=HPMALDONADO\\SQL2008;Initial Catalog=DANIXML;Integrated Security=True");
conConexionSQL.Open();
MessageBox.Show(conConexionSQL.State.ToString());
MiClaseSerializable a = new MiClaseSerializable();
a.strNombre = "Daniel ";
a.strApellido = "Maldonado";
a.MostrarNombre();
// Aqui creo un objeto serializador //
XmlSerializer mySerializer = new XmlSerializer(typeof(MiClaseSerializable));
// Esto Serializa y enva el contenido a un archivo //
StreamWriter myWriter = new StreamWriter("myFileName.xml");
mySerializer.Serialize(myWriter, a);
// Esto serializa a una vabiable de memoria en C# que puede enviarse como parmetro a otra aplicacin //
StringWriter b = new StringWriter();
mySerializer.Serialize(b,a);
myWriter.Close();
MessageBox.Show(b.ToString());
// Todo esto para poder pasarlo como parmetro del Tipo SqlXML a un procedimiento almacenado //
MemoryStream Memo = new MemoryStream();
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.ConformanceLevel = ConformanceLevel.Auto;
settings.Encoding = Encoding.ASCII;
XmlWriter writer = XmlWriter.Create(Memo,settings);
writer.WriteString(b.ToString());
// Aqui voy a invocar al Procedimiento ALMACENADO //
SqlCommand Cmd = conConexionSQL.CreateCommand();
Cmd.CommandType = CommandType.StoredProcedure;
Cmd.CommandText = "insertarXML";
SqlXml ParametroSQLXML = new SqlXml(Memo);
Cmd.Parameters.AddWithValue("@XML", ParametroSQLXML);
int filas_afectadas = Cmd.ExecuteNonQuery();
MessageBox.Show("La cantidad de Filas Afectadas es: " + filas_afectadas.ToString());
Sin comentar tu diseño, ¿realmente necesitas que el tipo de datos sea
sqlxml? Debería ser
suficiente con un varchar(max).
También te recomiendo que pruebes primero si la serialización/
deserialización está bien hecha,
obviando el sqlserver en tus pruebas. Serializa a un string y
reconstruyes el objeto desde ahí.
-H.
Tambi�n se puede utilizar una variable del tipo text.
El tema es que por algo existe el tipo de Datos SqlXML en .NET
Debe tener sus ventajas respecto del varchar. Sabiendo que el varchar tiene
como m�ximo creo que 8000 caracteres.
si son XML grandes, objetos grandes voy a tener problemas.
por eso me gustar�a que algui�n comparta � me oriente mejor respecto de
serializar/desserializar objetos.
Sobre todo cuando quiero trabajar con SQL 2008.
Seguramente alguien tiene hecho algo � alg�n link que me oriente bien.
Saludos.
Daniel.
P/D: ley del �ltimo recurso utilizar una variable varchar � text. y si no se
puede, no se puede.
"Hernan" <hfof...@gmail.com> escribi� en el mensaje
news:53cadf68-4051-4439...@t15g2000vbo.googlegroups.com...
On 28 abr, 18:01, "Daniel Maldonado" <ingdmaldon...@gmail.com> wrote:
> Espec�ficamente estoy trabajando los objetos de mi aplicaci�n hasta el
> momento de una forma
> muy CAVERNICOLA dir�a. porque por ejemplo
> si tengo un objeto que tiene Cabecera y detalle estoy enviando por un lado
> la cabecera y por otro
> lado el detalle cuando talvez podr�a serializar el objeto
> y enviar las dos cosas serializando el objeto XML y desde el otro lado
> descompongo ese XML
> y grabo cabecera y detalle de un solo tiro. Pero bueno, estoy intentando
> cambiar eso.
Sin comentar tu dise�o, �realmente necesitas que el tipo de datos sea
sqlxml? Deber�a ser
suficiente con un varchar(max).
Tambi�n te recomiendo que pruebes primero si la serializaci�n/
deserializaci�n est� bien hecha,
obviando el sqlserver en tus pruebas. Serializa a un string y
reconstruyes el objeto desde ah�.
-H.
varchar(max) permite superar el límite de los 8000, y eso fue lo que
te sugerí.
El tipo text es obsoleto.
Si lo único que necesitas es implementar persistencia, tampoco es
necesario
que la serialización sea XML. El BinaryFormatter es mas rápido y mas
compacto.
Pero en este caso la columna del sqlserver sería varbinary(max).
On 28 abr, 18:33, "Daniel Maldonado" <ingdmaldon...@gmail.com> wrote:
> Si, Hernan. Coincido con vos.
>
> También se puede utilizar una variable del tipo text.
>
> El tema es que por algo existe el tipo de Datos SqlXML en .NET
>
> Debe tener sus ventajas respecto del varchar. Sabiendo que el varchar tiene
> como máximo creo que 8000 caracteres.
>
> si son XML grandes, objetos grandes voy a tener problemas.
>
> por eso me gustaría que alguién comparta ó me oriente mejor respecto de
> serializar/desserializar objetos.
>
> Sobre todo cuando quiero trabajar con SQL 2008.
>
> Seguramente alguien tiene hecho algo ó algún link que me oriente bien.
>
> Saludos.
>
> Daniel.
>
> P/D: ley del último recurso utilizar una variable varchar ó text. y si no se
> puede, no se puede.
>
> "Hernan" <hfoff...@gmail.com> escribió en el mensajenews:53cadf68-4051-4439...@t15g2000vbo.googlegroups.com...
> On 28 abr, 18:01, "Daniel Maldonado" <ingdmaldon...@gmail.com> wrote:
>
> > Específicamente estoy trabajando los objetos de mi aplicación hasta el
> > momento de una forma
> > muy CAVERNICOLA diría. porque por ejemplo
> > si tengo un objeto que tiene Cabecera y detalle estoy enviando por un lado
> > la cabecera y por otro
> > lado el detalle cuando talvez podría serializar el objeto
> > y enviar las dos cosas serializando el objeto XML y desde el otro lado
> > descompongo ese XML
> > y grabo cabecera y detalle de un solo tiro. Pero bueno, estoy intentando
> > cambiar eso.
>
> Sin comentar tu diseño, ¿realmente necesitas que el tipo de datos sea
> sqlxml? Debería ser
> suficiente con un varchar(max).
> También te recomiendo que pruebes primero si la serialización/
> deserialización está bien hecha,
> obviando el sqlserver en tus pruebas. Serializa a un string y
> reconstruyes el objeto desde ahí.
>
> -H.
Serializaci�n binaria. si, tambi�n.
Comparto contigo.
Lo extra�o es que no consigo encontrar un ejemplo completo de
serializar/desserializar con .NET y SQL
manejando por supuesto el tipo de parametro SQLXml.
Hasta v� por ah� un SQLXMLCommand tambi�n.
hay tanto en .NET y muchas cosas sirven para lo mismo que realmente te
confunde.
hay tanto.
Saludos Hern�n.
Muchas gracias por tu comentario.
Atte. Daniel.
"Hernan" <hfof...@gmail.com> escribi� en el mensaje
news:d7906880-0124-43f1...@37g2000yqm.googlegroups.com...
No cuestiono que exista para algo; solo dudo que sea lo que tu
necesitas ;-)
Y no lo necesitas porque, entre otras cosas, no creo que te interese a
validar
el XML de salida de la serializaci�n contra un XSD; vamos, que eso no
lo hace
nadie.
varchar(max) permite superar el l�mite de los 8000, y eso fue lo que
te suger�.
El tipo text es obsoleto.
Si lo �nico que necesitas es implementar persistencia, tampoco es
necesario
que la serializaci�n sea XML. El BinaryFormatter es mas r�pido y mas
compacto.
Pero en este caso la columna del sqlserver ser�a varbinary(max).
On 28 abr, 18:33, "Daniel Maldonado" <ingdmaldon...@gmail.com> wrote:
> Si, Hernan. Coincido con vos.
>
> Tambi�n se puede utilizar una variable del tipo text.
>
> El tema es que por algo existe el tipo de Datos SqlXML en .NET
>
> Debe tener sus ventajas respecto del varchar. Sabiendo que el varchar
> tiene
> como m�ximo creo que 8000 caracteres.
>
> si son XML grandes, objetos grandes voy a tener problemas.
>
> por eso me gustar�a que algui�n comparta � me oriente mejor respecto de
> serializar/desserializar objetos.
>
> Sobre todo cuando quiero trabajar con SQL 2008.
>
> Seguramente alguien tiene hecho algo � alg�n link que me oriente bien.
>
> Saludos.
>
> Daniel.
>
> P/D: ley del �ltimo recurso utilizar una variable varchar � text. y si no
> se
> puede, no se puede.
>
> "Hernan" <hfoff...@gmail.com> escribi� en el
> mensajenews:53cadf68-4051-4439...@t15g2000vbo.googlegroups.com...
> On 28 abr, 18:01, "Daniel Maldonado" <ingdmaldon...@gmail.com> wrote:
>
> > Espec�ficamente estoy trabajando los objetos de mi aplicaci�n hasta el
> > momento de una forma
> > muy CAVERNICOLA dir�a. porque por ejemplo
> > si tengo un objeto que tiene Cabecera y detalle estoy enviando por un
> > lado
> > la cabecera y por otro
> > lado el detalle cuando talvez podr�a serializar el objeto
> > y enviar las dos cosas serializando el objeto XML y desde el otro lado
> > descompongo ese XML
> > y grabo cabecera y detalle de un solo tiro. Pero bueno, estoy intentando
> > cambiar eso.
>
> Sin comentar tu dise�o, �realmente necesitas que el tipo de datos sea
> sqlxml? Deber�a ser
> suficiente con un varchar(max).
> Tambi�n te recomiendo que pruebes primero si la serializaci�n/
> deserializaci�n est� bien hecha,
> obviando el sqlserver en tus pruebas. Serializa a un string y
> reconstruyes el objeto desde ah�.
>
> -H.