0

私はここで、自分が間違っていることを理解しようとして、機知に富んでいます。私の目標は、単純に画像を 90 度回転し、変更された完全な画像をファイル システムに保存してから、データベースのサムネイル バージョンを更新することです。ファイル システム イメージは適切に変更されますが、イメージがデータベースに保存されると、最初の 28 文字だけが保存されます。SQL はエラーを報告しません。

ここで私が間違ったことについてのアイデアは大歓迎です。前もって感謝します。

    Image image = Image.FromFile(image_path);
    image.RotateFlip(RotateFlipType.Rotate90FlipNone);
    image.Save(image_path, System.Drawing.Imaging.ImageFormat.Jpeg);

    Byte[] thumbnail = null;
    System.Drawing.Image thumb = image.GetThumbnailImage(72, 47, () => false, IntPtr.Zero);
    thumbnail = imageToByteArray(thumb);
    image.Dispose();

        string conn = ConfigurationManager.ConnectionStrings["MY_DATABASE"].ConnectionString;
        SqlConnection sqlConn = new SqlConnection(conn);
        SqlCommand sqlComm = new SqlCommand();
        sqlComm = sqlConn.CreateCommand();
        sqlComm.CommandText = @"UPDATE MY_TABLE SET pic='@thumbnail' WHERE pic_id= cast(@pic_id As Int) ";
        sqlComm.Parameters.Add("@thumbnail", SqlDbType.Image, thumbnail.Length).Value = thumbnail;
        sqlComm.Parameters.Add("@pic_id", SqlDbType.Int);
        sqlComm.Parameters["@pic_id"].Value = Convert.ToInt32(pic_id);
        try
        {
            sqlConn.Open();
            Int32 rowsAffected = sqlComm.ExecuteNonQuery();
            context.Response.Write("rowsAffected:" + rowsAffected + "<br/>");
        }
        catch (Exception ex)
        {
            context.Response.Write(ex.Message);
        }
        //sqlConn.Open();
        //sqlComm.ExecuteNonQuery();
        sqlConn.Close();

        context.Response.BinaryWrite(thumbnail);
4

1 に答える 1

1

MY_TABLE SET pic='@thumbnail'

疑わしいように見えますが、なぜ引用符ですか?

推測では、ビットマップのヘッダーを上書きしていると思います。文字列「@thumbnail」がヘッダーの長さ「28」の設定に対応するビットパターンが何であれ。

http://en.wikipedia.org/wiki/BMP_file_format

于 2013-02-11T00:11:57.027 に答える