に保存する画像でオブジェクトをシリアライズは、私は、次のオブジェクトがSQLデータベース
はstatic string SerializeObjectToXmlString(object o)
{
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(o.GetType());
System.IO.StringWriter writer = new System.IO.StringWriter();
serializer.Serialize(writer, o);
return writer.ToString();
}
Iは、次いで、データベースに挿入するための取り扱いNTEXT
としてSQL2000にストアドプロシージャにこのシリアライズ文字列を渡す:
SELECT * INTO #TempImages
FROM OpenXML(@iDoc, '/ArrayOfExampleImage/ExampleImage')
WITH ([Filename] VARCHAR(255) './Filename', [Content] IMAGE './Content')
私が抱えている問題は、画像がゴミ箱になっていることです。 btye[]
がDBに正しく保存されていません。他のフィールドは問題ありません。これは、バイナリデータをXML経由でSQLに送信しようとする最初の試みです。この時点で間違っている可能性が最も高いです。私のSerializeObjectToXmlString
が問題を機能していて、byte[]
のシリアル化を正しく処理していないか、おそらくOpenXML
SQL関数か、XMLをNTEXT
paramとして送信していることさえあります。私は、バイナリを適切にエンコードする関数serializeを期待しますが、間違っている可能性があります。
画像の束を一度に保存することは、何が問題なのか、それとももっと良い方法でしょうか?
編集:私は何が起こっているかと思います、シリアライザは、その後、BASE64としてストアドプロシージャに渡さ取得されたbase64文字列へbyte[]
を行っています。私はこのBase64文字列をSQLのImageフィールドに保存してbtye[]
として読み込みます。だから私は何とかbase64からbyte[]
まで私のテーブルに挿入する前にそれを取得する必要があると思いますか?
編集:私は私の唯一のオプションは、ストアドプロシージャを変更するだけの時間で1枚の画像を行うこととXMLを使用して、ちょうどImage
型としてbyte[]
に渡し、内のすべての呼び出しをラップしていないと思い始めていますトランザクション。
(ちなみに、
Serializable
属性は、XMLシリアル化のためには意味がありません)実際のオブジェクトのバージョンをよりシンプルにすることができます。ファイルの内容は唯一のバイナリデータですが、私はまだDBに保存されている他のデータを取得する必要があります。 – KelseySQL Server 2000でvarbin(max)を使用していない場合は、image –