none
如何將一個物件的Array放到資料庫的一個欄位 RRS feed

  • 問題

  • 我想記錄一筆資料,其中有個欄位想放入一個String的Array

    請問要如何做到

    我用的開發環境是VS2005 ASP.NET 2.0

    2006年4月10日 下午 02:41

解答

所有回覆

  • //如果你有個DataSet叫dataSet1好了。

    DataRows drs = dataSet1["資料表名"].Rows;

    //假設你要是存在一個string的Array。

    string[ ] a = new string[drs.count()];

    for(int i = 0; i < a.Length; i++)
    {
     a[ i ] = (string)drs[ i ]["Col"];

    //第 i 列的Col欄位名
    }

    大概是這樣寫的。 C#語法

    2006年4月10日 下午 07:49
  • 我想我表達錯誤了,我是要將一整個String Array放到某資料庫的某筆資料的某欄位

    所以一個Row的Col就要能存整個Array的內容,請問要如何做

    2006年4月10日 下午 11:50
  • http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemruntimeserializationformattersbinarybinaryformatterclasstopic.asp

    將Array視為一個object做serialize存成binaryformat存入,

    要讀出來時,再Deserialize就好了。

    這是一種做法。

     

    如果你會用string builder將string Array做成單一string,存進資料庫後,

    要讀出來時再把他spilt出來就好了,你可以用像是逗號或是其他符號做string member之間的分隔符號。

    但這種做法是必須確定Array中並無出現與你分隔符號相同的字元。

    2006年4月11日 上午 12:50
  • 請問

    將Array視為一個object做serialize存成binaryformat存入,

    要讀出來時,再Deserialize就好了。

     

    這種方法從他的範例中好像要有個檔案當中繼檔

    Dim fs As New FileStream("DataFile.dat", FileMode.Create)
    這樣不會有潛在的錯誤容易發生嗎

    像是web的網站如果同時有人使用到這部份功能...???

    2006年4月11日 上午 09:12
  • 我pose的範例,只是用來做說明如何做serialize而已,他是輸出成檔案,

    而至於要存入資料庫的話,你把範例中的FileStream改成BinaryStream,

    直接輸進資料庫binary欄位就好了。不用中繼檔的。

    2006年4月11日 下午 01:45
  • BinaryStream是啥???

    查不到這個類別

    2006年4月11日 下午 02:21
  • http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemio.asp

    應該這麼說吧。繼承System.IO下的Stream,

    有BinaryReader可將binary讀出stream

    和BinaryWriter可公binary存入stream

    也就是…binary stream。對不起,我講的有點簡略就是了,造成你的誤會。

    你可以研究一下System.IO下的BinaryReader和BinaryWriter這兩個類型。

    2006年4月11日 下午 02:58
  • 那用 Chr(0), |, 或 , 作分隔

    把 String.Join("|", stringArray) 寫入資料庫

    讀出時,把 stringArray = String.Split("|") 來分割會不會比較簡單?

    2006年4月12日 下午 03:24
  • 嗯。我也贊成這個做法,至少殺雞不用牛刀,我以前交作業的程式也是常用。

    我之前第二篇時也給了這個建議。

    盡量建議不要讓使用者輸入了你分割符號的相同的字元。

    嗯,學習如何將物件序列化在存取物件目即狀態是很好用的,這方法在將物件存入資料庫或輸出成檔案也是個好方法,在網路RPC上的通訊的程式也有幫助。

    對了,再分享一個經驗,在做物件序列化你的物件下的member有參照的話盡量畢免此方法,否則序列化物件的member也只是對應參照而已。除非你在做物件member的設計時,都有注意到用深度copy而不是shadow copy(參照指派)

    像是 string[ ] a=b; // b是已經做好的string,這是淺層copy。

    string[ ] a = new string[b.lenth];

    for(int i = 0; i<a.length; i++) { a[ i] = b[ i]; } //這是深度copy。

    2006年4月12日 下午 04:43
  • 受教了~~~
    2006年5月5日 上午 06:22