using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using System.Runtime.Serialization.Formatters.Binary; using System.IO; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private DataSet LoadDataset() { DataSet ds = null; SqlConnection con = new SqlConnection(@"server=.\SQL2008;Trusted_connection=yes;Database=test"); SqlCommand cmd = new SqlCommand("select * from DSStore", con); con.Open(); SqlDataReader rdr = cmd.ExecuteReader(); if (rdr.Read()) { byte[] myDs = (byte[])rdr["DataSet"]; MemoryStream ms = new MemoryStream(myDs); BinaryFormatter bf = new BinaryFormatter(); ds = (DataSet)bf.Deserialize(ms); } con.Close(); return ds; } private void SaveDataset() { byte[] ds = SerializeDS( GetDataSet() ); SqlConnection con = new SqlConnection(@"server=.\SQL2008;Trusted_connection=yes;Database=test"); con.Open(); SqlCommand cmd = new SqlCommand("insert into DSStore ([DataSet]) values (@ds)",con); cmd.Parameters.AddWithValue("@ds", ds); cmd.ExecuteNonQuery(); con.Close(); } private byte[] SerializeDS(DataSet ds) { BinaryFormatter bf = new BinaryFormatter(); MemoryStream ms = new MemoryStream(); bf.Serialize(ms, ds); ms.Close(); byte[] data = ms.ToArray(); return data; } private DataSet GetDataSet() { NorthwindDataSet ds = new NorthwindDataSet(); SqlConnection con = new SqlConnection(@"server=.\SQL2008;Trusted_connection=yes;database=Northwind"); con.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = con; cmd.CommandText = "select * from customers"; ds.Tables["Customers"].Load(cmd.ExecuteReader()); cmd.CommandText = "select * from orders"; ds.Tables["Orders"].Load(cmd.ExecuteReader()); cmd.CommandText = "select * from [Order Details]"; ds.Tables["Order Details"].Load(cmd.ExecuteReader()); con.Close(); return ds; } private void button1_Click(object sender, EventArgs e) { SaveDataset(); } private void button2_Click(object sender, EventArgs e) { DataSet ds = LoadDataset(); dataGridView1.DataSource= ds.Tables["Orders"]; } } }In summary, use VarBinary(max) as storage type and BinaryFormatter() as serializer/deserializer (in binary form -maybe encrypted- you could also save to local isolated storage). You could even use DeflateStream() to compress/uncompress what you serialize/deserialize.