AFAIK आप ExecuteScalar का उपयोग करके बाइट [] पुनर्प्राप्त नहीं कर सकते हैं। आपको इसके बजाय ExecuteReader का उपयोग करना चाहिए। मापदंडों को सम्मिलित करते समय सुरक्षित पक्ष पर रहने के लिए, मैं स्वयं प्रकार निर्दिष्ट करना पसंद करता हूं, इसलिए मेरा सम्मिलन इस तरह दिखता है:
using (var conn = new NpgsqlConnection(connString))
{
string sQL = "insert into picturetable (id, photo) VALUES(65, @Image)";
using (var command = new NpgsqlCommand(sQL, conn))
{
NpgsqlParameter param = command.CreateParameter();
param.ParameterName = "@Image";
param.NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Bytea;
param.Value = ImgByteA;
command.Parameters.Add(param);
conn.Open();
command.ExecuteNonQuery();
}
}
फिर मैं इस तरह की छवि को पुनः प्राप्त और लोड कर सकता हूं:
using (var conn = new NpgsqlConnection(connString))
{
string sQL = "SELECT photo from picturetable WHERE id = 65";
using (var command = new NpgsqlCommand(sQL, conn))
{
byte[] productImageByte = null;
conn.Open();
var rdr = command.ExecuteReader();
if (rdr.Read())
{
productImageByte = (byte[])rdr[0];
}
rdr.Close();
if (productImageByte != null)
{
using (MemoryStream productImageStream = new System.IO.MemoryStream(productImageByte))
{
ImageConverter imageConverter = new System.Drawing.ImageConverter();
pictureBox1.Image = imageConverter.ConvertFrom(productImageByte) as System.Drawing.Image;
}
}
}
}
मुझे नहीं पता कि डालने पर डेटाटाइप निर्दिष्ट करने से कोई फर्क पड़ता है, इसलिए पहले रीडर का उपयोग करके पुनर्प्राप्त करने का प्रयास करें। अगर वह काम नहीं करता है, तो मेरा सुझाव है कि आप अपनी सम्मिलित दिनचर्या को मेरे जैसे कुछ में बदल दें।
कृपया ध्यान दें कि मेरे उदाहरण में आईडी एक पूर्णांक है, न कि कोई वर्ण भिन्न!