2011-02-07 8 views
1

(私のデスクトップの)mysqlデータベースにいくつかの写真があります。フィールドの型はblobです。実際には、テーブルをxmlファイルにエクスポートしてから、データベースのWebサイトにアップロードします。それは失敗しました。私は、XMLファイルにテーブルをエクスポートし、別のテーブル(テーブルの構造は同じです)に戻してインポートすることでそれを模倣しようとします。私はそれをすることができますが、私は同じ写真(いくつかのエンコーディングテキストのみ)を取得しません。mysql blobをxmlにエクスポートしてからインポートしてもcと同じ結果にならない#

XMLにテーブルをエクスポート:

FileStream fs = new FileStream(filename,FileMode.Create,FileAccess.Write,FileShare.None); 
StreamWriter sw = new StreamWriter(fs,Encoding.ASCII); 
ds.WriteXml(sw); //write the xml from the dataset ds 

データセットへのXMLのインポート:

FileStream fs = new FileStream(filename,FileMode.Open); 
DataSet ds = new DataSet(); 
ds.ReadXml(fs); 

別のテーブルへのデータセットを書き込む:

... 
    int count = ds.Tables[0].Rows.Count; 
    for(int i=0;i<count;i++) 
    { 
     DataRow myDR = ds.Tables[0].Rows[i]; 
     ... 
     byte[] myphoto = null; 
     if(myDR["myphoto"].ToString().Length > 0) 
     { 
      myphoto = Encoding.ASCII.GetBytes(myDR["myphoto"].ToString().ToCharArray()); 
     } 
     //insert the data to the mysql table 
     ... 
    } 
    ... 
をここでは、コードのいくつかの作品です

なぜ私はこの別のテーブルで同じ写真を取得しないのですか?
私の悪い英語のために申し訳ありません。

答えて

1

この見れ:

myphoto = Encoding.ASCII.GetBytes(myDR["myphoto"].ToString().ToCharArray()); 

としてテキストをエンコードあなたが任意のバイナリデータを処理しています。それはできません作品。 Encodingは、テキストデータバイナリ(指定されたテキスト形式、すなわちエンコーディング)に変換し、バイナリ(テキスト形式のバイナリ)をテキストに戻すことを意図しています。 できません任意のバイナリ(期待された形式ではない)をテキストとして扱います。簡単な例として、ASCIIは各オクテットの7ビットのみを使用します。 MSBセットを持つオクテットは、このサイクル中のある時点で破損することが保証されています。

あなたはベース64を使用、文字列としてバイナリデータを表現したい場合:バック変換すること

string s = Convert.ToBase64String(blob); 

を:

byte[] blob = Convert.FromBase64String(s); 
+0

こんにちはマルク、答えてくれてありがとう。しかし、私はデータセットからxmlの権利を書きます。どのようにコンバータを適用するには? – satria

+0

@satria xmlがどのように見えるのかわからなくても、どうやって知りましたか? –

+0

私は上記のコードを見ることができると思う(xmlにテーブルをエクスポートする)。私はテーブルを照会し、そのデータをデータセットに送信しました。 ds.WriteXml(sw)でxmlとして保存します。私はそれらをXMLに書き込む前に、データセット内のBLOBデータ(コンバータを使用する)を変更する必要がありますか? – satria

関連する問題