Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将二进制图像从数据库保存到文件夹时出错_C#_Sql Server_Image_Save_Netezza - Fatal编程技术网

C# 将二进制图像从数据库保存到文件夹时出错

C# 将二进制图像从数据库保存到文件夹时出错,c#,sql-server,image,save,netezza,C#,Sql Server,Image,Save,Netezza,我需要从数据库中检索图像并将其保存到磁盘。在数据库中,图像以二进制格式存储,但列的数据类型为varchar(5000) 这是我用来检索图像并将其保存到磁盘的代码 public void CreateImageDataUsingDataReader_ForNetezzaDB() { string strDbConn = string.Empty; string strImageFileName = string.Empty; string strIm

我需要从数据库中检索图像并将其保存到磁盘。在数据库中,图像以二进制格式存储,但列的数据类型为
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数据库中


请帮助我解决此问题

如果您提到将二进制图像存储在varchar列中。这一点以及它在另一种db技术上工作的事实,使得您在Netazza案例中读取不同的数据成为了一种威胁

我建议设置一个测试项目,将相同的映像持久化到两个不同的数据库(netazza和mssql),从两个数据库中读回,并在db结果之间或原始和从db读取的结果之间进行逐位比较


<>我会很惊讶如果你得到相同的结果,如果我是对的,你应该考虑使用二进制数据类型来保存你的数据库后端中的图像数据。< /P>删除你的<代码>尝试…catch子句,它正在隐藏错误。同意-您应该以二进制形式保存它们。无论如何,图像往往会占用大量空间,通过base64编码,您可以将它们放入varchar列中,这将使每个图像的大小增加1/3。