国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

在ASP.NET FORUMS中一種存儲和讀取思路

2024-07-10 12:57:37
字體:
來源:轉載
供稿:網友

今天在asp.net forums中發現了一種至少對于我來說特殊的存儲思路,那就是通過binaryformatter將多個字段進行圖像序列化,作為圖像存儲進數據庫,然后通過轉換成內存流再讀出來,這種做法對于需要存儲多個字段的時候,非常的方便.不用再寫一長串的變量賦值.
首先看一看,與管理設置頁面相對應的一個實例類aspnetforums.components.sitesettings()

在sitesettings()定義了
hashtable settings = new hashtable();
接下來,定義了很多的屬性,分別對應于頁面中所需要的字段,這些屬性直接對應于hashtable例如:
public int sitesettingscachewindowinminutes {
get {
string key = "sitesettingscachewindowinminutes";

if (settings[key] != null)
return (int) settings[key];
else
return 15;
}
set {
settings["sitesettingscachewindowinminutes"] = value;
}
}

也就是說他是用hashtable的方式在存儲實體字段內容,不同于我們經常使用屬性來表示.
接下來看看他是如何將這個hashtable的內容放進數據庫進去的
sqldataprovider類中有如下定義
public override void savesitesettings(sitesettings sitesettings) {
//定義一個圖像序列化實例
binaryformatter binaryformatter = new binaryformatter();
//定義一個內存流實例
memorystream ms = new memorystream();
byte[] b;

using( sqlconnection connection = getsqlconnection() ) {
sqlcommand command = new sqlcommand(this.databaseowner + ".forums_sitesettings_save", connection);
command.commandtype = commandtype.storedprocedure;


//將內存流反序列,sitesettings.settings中包含有內存流中所有的標題字段
binaryformatter.serialize(ms, sitesettings.settings);

//重置內存流當前位置
ms.position = 0;

b = new byte[ms.length];
//將內存流寫入到b中
ms.read(b, 0, b.length);

// set the parameters
//
command.parameters.add("@application", sqldbtype.nvarchar, 512).value = sitesettings.sitedomain;
command.parameters.add("@forumsdisabled", sqldbtype.smallint).value = sitesettings.forumsdisabled;
//做為圖像存入數據庫
command.parameters.add("@settings", sqldbtype.varbinary, 8000).value = b;

// open the connection and exectute
//
connection.open();
command.executenonquery();
connection.close();

}

binaryformatter = null;
ms = null;
}
很簡單吧!不用再傳多個參數,只用先把hashtable的屬性填上,然后將其反序列化為圖像填入內存流,接著寫入byte結構,最后將這個結構實例作為二進制圖像流寫入數據庫
一句話!方便:)
從數據庫中把這些值讀出來也很容易,只需要
binaryformatter binaryformatter = new binaryformatter();
//上面提到的實體類
sitesettings settings = new sitesettings();
memorystream ms = new memorystream();
byte[] b;
//dr是一個datareader
b = (byte[]) dr["settings"];

//寫入流
ms.write(b, 0, b.length);

// set the memory stream position to the beginning of the stream
//
ms.position = 0;

//將內存流反序列,并返回成hashtable
settings.settings = (hashtable) binaryformatter.deserialize(ms);
總結:這種方法應該是適用于同時多個字段存入數據庫,不過不是很好跟蹤.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 赤峰市| 扶绥县| 龙海市| 湖州市| 沂水县| 陆川县| 新余市| 察隅县| 淳安县| 吴堡县| 阳原县| 成武县| 万源市| 彭阳县| 手游| 吉木乃县| 景洪市| 南澳县| 合川市| 买车| 射洪县| 丹棱县| 开封市| 武乡县| 百色市| 漳浦县| 阜康市| 张掖市| 渭南市| 龙海市| 上饶市| 玉林市| 凭祥市| 云南省| 邛崃市| 新蔡县| 保德县| 大悟县| 巴中市| 探索| 全椒县|