SQL Server 데이터베이스에 'Object'를 저장할 수 있습니까?
SQL Server 2005에서 객체(어떤 유형이든)를 데이터베이스의 필드에 저장하고자 합니다.가능합니까?객체를 예를 들어 바이트 배열과 같은 것으로 변환하고 검색할 때 다시 캐스트해야 합니까?
사용할 수 있습니다.VARBINARY(MAX)원하는 경우 SQL Server의 필드 유형을 입력합니다.최대 2GB 크기의 모든 유형의 개체를 저장할 수 있습니다.
접속하려면 ADO를 사용하면 됩니다.NET - 다음과 같은 것:
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();
마크
JSON을 사용하여 객체를 문자열로 변환하고 VARCHAR 또는 TEXT 필드에 저장합니다.데이터는 사람이 읽을 수 있는 형식으로 저장될 뿐만 아니라, 거의 모든 주류 언어에는 JSON 파서가 사용 가능하기 때문에 여러 언어에서 읽을 수도 있습니다.
제가 올린 링크에는 여러 언어(C# 포함)로 된 여러 라이브러리의 링크가 있는데, 예전에 몇 번 사용한 적이 있습니다.
Entity Framework(EF)를 사용하는 경우의 예는 다음과 같습니다.
using (DbContext db = new DbContext())
{
// The object that you want to serialize. In this case it is just an empty instance
YourObject objectToSerialize = new YourObject();
IFormatter formatter = new BinaryFormatter();
using (MemoryStream stream = new MemoryStream())
{
formatter.Serialize(stream, objectToSerialize);
// EF model. In one of its properties you store the serialized object
YourModel modelObject = new YourModel();
// In your model 'SerializedObject' should be of type byte[]. In the database it should be of type varbinary(MAX)
modelObject.SerializedObject = stream.ToArray();
db.YourModel.Add(modelObject);
db.SaveChanges();
}
}
다음은 개체의 직렬화를 해제하는 방법입니다.
// De-serialize
IFormatter formatter = new BinaryFormatter();
Stream stream = new MemoryStream(serializedObject);
YourObject deserializedYourObject = (YourObject)formatter.Deserialize(stream);
stream.Close();
다른 사람들이 말했듯이, 여기서는 직렬화가 핵심일 수 있습니다(ORM을 사용하여 속성을 테이블의 열로 저장하고 싶지 않다고 가정하면 훨씬 더 직접적으로 보입니다).
그러나 몇 가지 주의 사항: 데이터베이스는 다음과 같습니다.
- 장기 보관
- 당신과 관련이 없습니다.NET코드
따라서 플랫폼별 또는 버전별 직렬화 기법을 사용하지 않을 수 있습니다.당신은 사람들이 언급하는 것을 자주 볼 것입니다.BinaryFormatter저항력이 필요하지만, 이것은 위의 두 가지 함정에 모두 해당합니다.플랫폼을 변경하거나 일부 속성만 변경해도 문제가 발생할 수 있습니다.
구현에 독립적인 접근 방식이 필요합니다. 가장 간단한 것(인간이 읽을 수 있는 기능도 보유)은 xml 또는 json입니다.XmlSerializer아니면 Json.NET(에 저장됨)[n]varchar(max)사람이 읽을 수 있는 것을 신경쓰지 않는다면, "protocol buffer" (fast/binary)가 좋을 것입니다 (a에 저장됨).varbinary(max), 및 C#/을 포함한 대부분의 플랫폼에서 사용할 수 있습니다.NET/등).
이렇게 하려면 개체를 직렬화해야 합니다.여기서 예를 살펴볼 수 있습니다.
언급URL : https://stackoverflow.com/questions/1299410/can-i-save-an-object-in-a-sql-server-database
'programing' 카테고리의 다른 글
| brew - mysql은 설치 계정에 서명하지 않으면 사용할 수 없습니다. (0) | 2023.10.27 |
|---|---|
| Stripe Webhook에서 Parse.com 사용자 업데이트 (0) | 2023.10.27 |
| Android 키 도구를 찾을 수 없습니다. (0) | 2023.10.27 |
| c에서 배열 이름이 정확히 무엇입니까? (0) | 2023.10.27 |
| 웹 페이지가 JavaScript를 사용하여 다른 곳으로 이동하지 못하도록 방지 (0) | 2023.10.22 |