Search code examples
c#sql-serversql-server-2005ado.net

Can I save an 'Object' in a SQL Server database?


I want to save an object (of any type) into a field in a database in SQL Server 2005. Is it possible? Do I have to convert the object into something, like a byte array for example and cast it back when retrieving it?


Solution

  • You can use the VARBINARY(MAX) field type in SQL Server, if you like. You can store any type of object in there, up to 2 GB in size.

    To access it, you can use ADO.NET - something like this:

    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();
    

    Marc