문제

vb.net 사용자 정의 개체를 SQL 데이터베이스에 저장하려면 어떻게 해야 합니까?열을 사용하여 속성을 복제하려고 하지 않습니다.내 개체를 바이트 배열로 변환하거나 인코딩한 다음 이를 db의 필드에 저장하는 방식을 의미합니다.세션에 객체의 인스턴스를 저장할 때와 비슷하지만 현재 세션 이후에도 지속하려면 정보가 필요합니다.


@오리온 에드워즈

입장의 문제가 아닙니다.언젠가는 코드를 변경할 것이기 때문입니다.그런 다음 이전 개체를 역직렬화하려고 하면 프로그램이 충돌하게 됩니다.

내 프로그램은 "충돌"하지 않으며 예외가 발생합니다.운 좋게도 .net에는 그러한 경우를 위한 전체 수업 세트가 있습니다.그러면 오래된 데이터를 새로 고치고 DB에 다시 넣을 것입니다.이것이 바로 이 분야(또는 경우에 따라 입장)의 요점입니다.

도움이 되었습니까?

해결책

당신이 사용할 수있는 직렬화 - 최소한 3가지 형식으로 개체를 저장할 수 있습니다.바이너리(BLOB에 적합), XML(MSSQL의 XML 데이터 유형 활용) 또는 일반 텍스트(varchar 또는 텍스트 열에 저장)

다른 팁

자신의 궁극적인 광기를 향해 이 길을 가기 전에 다음을 살펴보아야 합니다(또는 언젠가 반복).

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

데이터베이스에 개체를 유지하는 것은 좋은 생각이 아닙니다.이는 데이터베이스가 수행하도록 설계된 모든 좋은 작업을 종료합니다.

당신은 바이너리포맷 클래스를 사용하여 개체를 이진 형식으로 직렬화한 다음 결과 문자열을 데이터베이스에 저장합니다.

.net 3.x의 XmlSerializer 또는 DataContractSerializer가 해당 작업을 수행합니다.

@aku, lomaxx 및 bdukes - 귀하의 솔루션이 제가 찾던 것입니다.

@1800 정보 - 이 문제에 대한 귀하의 입장에 감사드립니다. 이것은 한 달에 한 번만 새로 고쳐지는 웹 서비스에서 얻는 데이터의 특별한 경우입니다.그것이 웹 서비스의 목적이기 때문에 db 형식으로 유지되는 데이터가 필요하지 않습니다.아래는 마침내 작동하게 된 코드입니다.

직렬화

    #'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)

역직렬화

    #'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)

당신이 원하는 것은 개체를 "직렬화"하는 것이며 .Net에는 이를 수행하는 몇 가지 다른 방법이 있습니다.하나는 System.Xml.Serialization 네임스페이스의 XmlSerializer 클래스입니다.

다른 하나는 System.Runtime.Serialization 네임스페이스에 있습니다.이는 SOAP 포맷터, 바이너리 포맷터 및 상속할 수 있는 기본 클래스를 지원하며 모두 공통 인터페이스를 구현합니다.

말씀하신 내용으로는 앞서 제안한 BinaryFormatter가 아마도 최고의 성능을 발휘할 것입니다.

나는 이것에 대한 @1800 정보를 지지합니다.
장기 저장을 위해 객체를 직렬화하는 것은 결코 좋은 생각이 아닙니다.

이 문제에 대한 귀하의 입장에 감사드립니다. 이것은 한 달에 한 번 정도만 새로 고쳐지는 웹 서비스에서 얻는 데이터의 특별한 경우입니다.

입장의 문제가 아닙니다.언젠가는 코드를 변경할 것이기 때문입니다.그런 다음 이전 개체를 역직렬화하려고 하면 프로그램이 충돌하게 됩니다.

충돌이 발생하거나 예외가 발생하면 남은 것은 개체를 다시 만들기 위해 시도하고 선별할 바이너리 데이터 묶음뿐입니다.

바이너리만 유지하는 경우 디스크에 직접 저장하는 것이 좋습니다.앞서 언급한 것처럼 개체 정의를 변경하면 약간의 노력 없이는 개체 정의를 해제할 수 없으므로 xml과 같은 것을 사용하는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top