Saltar al contenido

¿Puedo guardar un ‘Objeto’ en una base de datos de SQL Server?

Después de de nuestra prolongada búsqueda de datos hemos podido solucionar este conflicto que presentan muchos lectores. Te brindamos la solución y esperamos serte de gran apoyo.

Solución:

Puedes usar el VARBINARY(MAX) tipo de campo en SQL Server, si lo desea. Puede almacenar cualquier tipo de objeto allí, hasta 2 GB de tamaño.

Para acceder a él, puede usar ADO.NET, algo como esto:

object yourMysteryObject = (whatever you like it to be);

MemoryStream memStream = new MemoryStream();
StreamWriter sw = new StreamWriter(memStream);

sw.Write(yourMysteryObject);

SqlCommand sqlCmd = new SqlCommand("INSERT INTO TableName(VarBinaryColumn) VALUES (@VarBinary)", sqlConnection);

sqlCmd.Parameters.Add("@VarBinary", SqlDbType.VarBinary, Int32.MaxValue);

sqlCmd.Parameters["@VarBinary"].Value = memStream.GetBuffer();

sqlCmd.ExecuteNonQuery();

Bagazo

Usaría JSON para convertir el objeto en un stringy guárdelo en un campo VARCHAR o TEXT. Los datos no solo se almacenan en un formato legible por humanos, sino que también se pueden leer desde diferentes idiomas, ya que casi todos los idiomas principales tienen un analizador JSON disponible.

El enlace que publiqué tiene enlaces a varias bibliotecas en muchos idiomas (incluido C #), lo he usado un par de veces en el pasado.

Como han dicho otros, la serialización puede ser la key aquí (asumiendo que no desea usar ORM para almacenar las propiedades como columnas en una tabla, lo que parece mucho más directo).

Sin embargo, algunas advertencias; una base de datos es:

  • almacenamiento a largo plazo
  • no relacionado con su código .NET

Como tal, lo haces no desea utilizar cualquier técnica de serialización que sea específica de la plataforma o de la versión. A menudo verás que la gente menciona BinaryFormatter para la persistencia, pero esto cae en las dos trampas anteriores. Sería frustrado si alguna vez cambiara de plataforma, o incluso si solo cambiara algunas propiedades.

Necesita un enfoque independiente de la implementación; el más simple (que también conserva la capacidad de ser legible por humanos) es xml o json, quizás a través de XmlSerializer o Json.NET (almacenado en un [n]varchar(max)). Si no le importa la legibilidad humana, los “búferes de protocolo” (rápidos/binarios) funcionarían bien (almacenados en un varbinary(max)) y está disponible para la mayoría de las plataformas (incluido C#/.NET/etc).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *