0

iPadアプリからSQLサーバーへのデータの保存に問題があります。私はそれが主にデータ型に関係していると思います。データベースから始めて、SQLServerデータ型としてImageフィールドがあります:image。.NETで同等のデータ型を探しましたが、次のリンクからわかりました:http://msdn.microsoft.com/en-us/library/cc716729.aspx最適な選択はバイト配列です:Byte []

.NETで使用しているエンティティ/クラスには次のものがあります。publicclassMyClass{public Byte [] Image {get; セットする; }}と、このデータを渡すために使用しているパラメーターは次のようになります。

SqlParameter param_image = cmd.Parameters.Add("IMAGE", SqlDbType.Image, item.Image.Length);
param_image.Value = System.Convert.FromBase64String(item.Image);
param_image.Direction = ParameterDirection.Input;

ただし、文字列からバイト配列に変換しようとすると、パラメータからエラーが発生します。誰かがこれをしましたか?

4

2 に答える 2

1

2つの意見:

  • item.ImageはByte[]であり、FromBase64Stringから期待されるStringではありません(これはエラーである可能性がありますか?)。試す:

    param_image.Value = item.Image

  • IMAGEデータ型の代わりにvarbinary(max)を使用する必要があります。IMAGEデータ型は非推奨になりました(サポートされていますが、将来削除される予定です)

于 2012-11-01T23:44:28.567 に答える
0

非推奨のデータ型であるIMAGEは使用しないでください。VARBIANRY(MAX)を使用します。データをbase64エンコードとして保存すると、スペースが無駄になるため、問題があります。一方、画像を提供する際の処理を節約できることは事実ですが、処理をHTTPサーバーにプッシュしてスケールアウトすることはできますが、スペースの損失を軽減することはできません。接続されていないバイナリイメージストリームを保存することをお勧めします。HTTP経由でSQLServerとの間でメディアをアップロードおよびダウンロードするストリーミングセマンティクスを利用する完全な例については、ASP.NETMVC経由でSQLServerから画像をダウンロードおよびアップロードするを参照してください。。iOSインタラクションへの適応は簡単であり、この概念は、エンドツーエンドのストリーミングを実現するためにさらにスマートなことを行うように適応させることができます(つまり、HTTP while-file postではなく、クライアントから送受信される個々のフラグメント)。大きなメディアタイプのコンテンツ(画像、ビデオ、ドキュメント)を操作する場合、ストリーミングセマンティクスを使用することの重要性を十分に強調することはできません。

于 2012-11-02T08:42:20.067 に答える