0

データベースから画像を取得してディスクに保存する必要があります。データベースでは、イメージはバイナリ形式で保存されますが、列のデータ型はvarchar(5000).

これは、画像を取得してディスクに保存するために使用しているコードです

public void CreateImageDataUsingDataReader_ForNetezzaDB()
{
        string strDbConn = string.Empty;
        string strImageFileName = string.Empty;
        string strImageData = string.Empty;
        string strImgSavePath = string.Empty;
        string strQuery = string.Empty;

        Byte[] byteImageData;
        MemoryStream stmImageData = new MemoryStream();
        Image saveImage;

        try
        {
            //---open the database connection
            strDbConn = ConfigurationSettings.AppSettings["NetezzaDBConnection"].ToString().Trim();
            OleDbConnection dbcon = new OleDbConnection(strDbConn);
            dbcon.Open();
            strQuery = "select name,signature_vod__c from sfb_call2_vod where signature_vod__c is not null  limit 10";
            OleDbCommand cmdSelect = new OleDbCommand(strQuery, dbcon);
            OleDbDataReader imageReader = cmdSelect.ExecuteReader();

            if (imageReader.HasRows)
            {
                while (imageReader.Read())
                {
                    strImageFileName = imageReader["name"].ToString().Trim();
                    strImageData = imageReader["signature_vod__c"].ToString().Trim();

                    stmImageData.Seek(0, SeekOrigin.Begin);
                    //converting string to byte array
                    byteImageData = Convert.FromBase64String(strImageData);
                    //---create Memory stremm from the Image Byte data                        
                    stmImageData.Write(byteImageData, 0, byteImageData.Length);
                    //--saving the image
                    //saveImage = Image.FromStream(stmImageData);
                    using (saveImage = Image.FromStream(stmImageData))
                    {
                        strImgSavePath = ConfigurationSettings.AppSettings["ImageSavePath"].ToString().Trim();
                        saveImage.Save(strImgSavePath + strImageFileName + ".png", System.Drawing.Imaging.ImageFormat.Png);   ///---error comes in this line                           
                    }
                }
            }
            imageReader.Close();
            dbcon.Close();
            stmImageData.Close();
            stmImageData = null;
        }
        catch (Exception ex)
        {
            throw new Exception("Error Occured in method CreateImageDataUsingDataReader " + ex.Message);
        }
}

しかし、私はエラーが発生し続けます:

GDI+ で一般的なエラーが発生しました。

同じコードを SQL Server データベースに対して実行すると正常に動作しますが、問題は Netezza データベースでのみ発生します

この問題の解決を手伝ってください

4

1 に答える 1