Pergunta

Como posso armazenar um objeto definido pelo usuário vb.net em um banco de dados sql.Não estou tentando replicar as propriedades com colunas.Quero dizer algo como converter ou codificar meu objeto em uma matriz de bytes e, em seguida, armazená-lo em um campo no banco de dados.Como quando você armazena uma instância de um objeto na sessão, mas preciso que as informações persistam após a sessão atual.


@Orion Edwards

Não é uma questão de posturas.É porque um dia você mudará seu código.Então você tentará desserializar o objeto antigo e SEU PROGRAMA irá travar.

Meu programa não irá "CRASH", irá lançar uma exceção.Para minha sorte, o .net tem todo um conjunto de aulas dedicadas a essa ocasião.Nesse momento, atualizarei meus dados obsoletos e os colocarei de volta no banco de dados.Esse é o objetivo deste campo (ou postura, conforme o caso).

Foi útil?

Solução

Você pode usar serialização - permite armazenar seu objeto pelo menos de 3 formas:binário (adequado para BLOBs), XML (aproveite o tipo de dados XML do MSSQL) ou apenas texto simples (armazene em varchar ou coluna de texto)

Outras dicas

Antes de seguir esse caminho em direção à sua eventual insanidade, você deveria dar uma olhada nisso (ou um dia repeti-lo):

http://thedailywtf.com/Articles/The-Mythical-Business-Layer.aspx

Persistir objetos em um banco de dados não é uma boa ideia.Ele mata todas as coisas boas para as quais um banco de dados foi projetado.

Você poderia usar o BinárioFormatter class para serializar seu objeto em um formato binário e salve a string resultante em seu banco de dados.

O XmlSerializer ou o DataContractSerializer no .net 3.x farão o trabalho para você.

@aku, lomaxx e bdukes - suas soluções são o que eu procurava.

@1800 INFORMAÇÕES - embora eu aprecie sua posição sobre o assunto, este é um caso especial de dados que recebo de um serviço da web que é atualizado apenas uma vez por mês.Não preciso que os dados persistam no formato db porque é para isso que serve o webservice.Abaixo está o código que finalmente comecei a trabalhar.

Serializar

    #'res is my object to serialize
    Dim xml_serializer As System.Xml.Serialization.XmlSerializer
    Dim string_writer As New System.IO.StringWriter()
    xml_serializer = New System.Xml.Serialization.XmlSerializer(res.GetType)
    xml_serializer.Serialize(string_writer, res)

Desserializar

    #'string_writer and xml_serializer from above
    Dim serialization As String = string_writer.ToString
    Dim string_reader As System.IO.StringReader
    string_reader = New System.IO.StringReader(serialization)
    Dim res2 As testsedie.EligibilityResponse
    res2 = xml_serializer.Deserialize(string_reader)

O que você deseja fazer é chamado de "Serializar" seu objeto, e o .Net tem algumas maneiras diferentes de fazer isso.Uma é a classe XmlSerializer no namespace System.Xml.Serialization.

Outro está no namespace System.Runtime.Serialization.Ele tem suporte para um formatador SOAP, um formatador binário e uma classe base da qual você pode herdar, todos implementando uma interface comum.

Pelo que você está falando, o BinaryFormatter sugerido anteriormente provavelmente terá o melhor desempenho.

Estou apoiando @1800 Informações sobre este.
Serializar objetos para armazenamento de longo prazo nunca é uma boa ideia

embora eu aprecie sua posição sobre o assunto, este é um caso especial de dados que recebo de um serviço da web que é atualizado apenas uma vez por mês.

Não é uma questão de posturas.É porque um dia você mudará seu código.Então você tentará desserializar o objeto antigo e SEU PROGRAMA irá travar.

Se ele travar (ou lançar uma exceção), tudo o que resta é um monte de dados binários para tentar filtrar e recriar seus objetos.

Se você está apenas persistindo em binário, por que não salvar diretamente no disco.Você também pode querer usar algo como xml, pois, como foi mencionado, se você alterar a definição do objeto, talvez não consiga desserializá-lo sem muito trabalho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top