建立專案
1. 新增乙個名為rwtest的表到 sql server mytest 資料庫。 表字段設定如下:
a. 唯一標識欄位名稱為"id",型別為int。
b. 名稱為"description"的varchar型別的字段,字段長度為50。
c. 名稱為"data" 的varbinary(max) 型別的字段。
2. 啟動 visual studio .net, 並建立乙個新的 visual c# windows 應用程式專案。
3. 從工具欄中拖兩個button 控制項到預設窗體, form1。
4. 在屬性視窗中修改name為buttonfiletodb, text 屬性為從檔案儲存到資料庫, 然後修改name為buttondbtofile ,text 屬性為從資料庫儲存到檔案。
原始碼例項
using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.text;
using system.windows.forms;
using system.data.sqlclient;
using system.io;
using system.collections;
using system.runtime.serialization.formatters.binary;
//資料庫說明:mytest資料庫,rwtest表,包含3列:id(int),description(varchar(50), data(varbinary(max))
namespace rwarraylistsql
public partial class form1 : form
arraylist arraylist = new arraylist();
public form1()
initializecomponent();
for (int i = 0; i < 100; i++)
ptdata ptdata = new ptdata();
ptdata.ptid = i + 1;
ptdata.ptname = convert.tostring(i + 1);
ptdata.pt_data = i + 1;
arraylist.add(ptdata);
private void buttonfiletodb_click(object sender, eventargs e)
sqlconnection sqlconnection = new sqlconnection("data source=liuxueqin;initial catalog=mytest;integrated security=true");
sqldataadapter sqldataadapter = new sqldataadapter("select * from rwtest", sqlconnection);
sqlcommandbuilder sqlcommandbuilder = new sqlcommandbuilder(sqldataadapter);
system.data.dataset dataset = new dataset("rwtest");
sqldataadapter.missingschemaaction = missingschemaaction.addwithkey;//確定現有 dataset 架構與傳入資料不匹配時需要執行的操作。
//定義乙個流
stream stream = new memorystream();
//定義乙個格式化器
binaryformatter bf = new binaryformatter();
foreach (object obj in arraylist)
bf.serialize(stream, obj); //序列化
byte array = null;
array = new byte[stream.length];
//將二進位製流寫入陣列
stream.position = 0;
stream.read(array, 0, (int)stream.length);
//關閉流
stream.close();
trysqldataadapter.fill(dataset, "rwtest");
//datarow表示datatable中的一行資料
system.data.datarow datarow1;
datarow1 = dataset.tables["rwtest"].newrow();
datarow1["id"] = 1;
datarow1["description"] = "this would be description text";
datarow1["data"] = array;
dataset.tables["rwtest"].rows.add(datarow1);
sqldataadapter.update(dataset, "rwtest");
sqlconnection.close();
messagebox.show("寫入資料庫成功!", " 資訊提示", messageboxbuttons.ok, messageboxicon.information);
catch (exception ex)
if (sqlconnection.state == connectionstate.open)
sqlconnection.close();
messagebox.show("寫入資料庫失敗"+ex.message, " 資訊提示", messageboxbuttons.ok, messageboxicon.error);
private void buttondbtofile_click(object sender, eventargs e)
sqlconnection sqlconnection = new sqlconnection("data source=liuxueqin;initial catalog=mytest;integrated security=true");
sqldataadapter sqldataadapter = new sqldataadapter("select * from rwtest", sqlconnection);
sqlcommandbuilder sqlcommandbuilder = new sqlcommandbuilder(sqldataadapter);
dataset dataset = new dataset("rwtest");
sqldataadapter.fill(dataset, "rwtest");
datarow myrow;
myrow = dataset.tables["rwtest"].rows[0];
byte b = null;
b = (byte)myrow["data"];
//定義乙個流
memorystream stream = new memorystream(b);
//定義乙個格式化器
binaryformatter bf = new binaryformatter();
while (stream.position != stream.length)
arraylist.add(bf.deserialize(stream)); //反序列化
stream.close();
for(int i=0;i<5;i++) //資訊提示,是否正確從資料庫中取出了arraylist鍊錶
messagebox.show(((ptdata)arraylist[i]).ptname, "資訊提示", messageboxbuttons.ok, messageboxicon.information);
if (sqlconnection.state == connectionstate.open)
sqlconnection.close();
messagebox.show(" 從資料庫讀出資料成功!", " 資訊提示", messageboxbuttons.ok, messageboxicon.information);
//在類的上面增加了屬性:serializable.(如果不加這個屬性,將丟擲serializationexception異常)。在不繼承自介面iserializable的情況下,通過增加[serializable]屬性可以允許該類可以被序列化。
[serializable]
class ptdata
public ptdata()
ptid = 1;
ptname = "none";
pt_data = 1.0;
public int ptid;
public string ptname;
public double pt_data;
}
C 實現將乙個類序列化儲存在資料庫中
建立專案 1.新增乙個名為rwtest的表到 sql server mytest 資料庫。表字段設定如下 a.唯一標識欄位名稱為 id 型別為int。b.名稱為 description 的varchar型別的字段,字段長度為50。c.名稱為 data 的varbinary max 型別的字段。2.啟...
java中序列化乙個物件儲存在檔案中的簡單過程
public class student implements serializable public student int id,string name override public string tostring public int getid public void setid int ...
將乙個類的乙個物件序列化到檔案
序列化 將記憶體中的物件 資料 變成乙個位元組序。反序列化 將位元組序還原為乙個物件。那麼這個只需要此物件寫入檔案,然後完成序列化 反序列化就是將此物件的序列化重新反序列化 序列化 將記憶體中的物件 資料 變成乙個位元組序。反序列化 將位元組序還原為乙個物件。include include incl...