Löste problemet genom att bygga om strukturen helt och använda mig av en annan infallsvinkel.
Hej!
Jag har ett problem med min bild-applikation som ska lägga in en bild binärt i en databas. Jag vill lägga in en dataström från mitt webform. Dags att visa lite kod för hur det hela är skrivet:
Här är presentationslagrets kod:
public string addImage(byte [] bBuffer, string strContentType, string strTitle, string strDesc)
{
string strSql = "SELECT * FROM imageGallery";
DataSet objDS = new DataSet();
OleDbDataAdapter objDA = new OleDbDataAdapter(strSql, this._objConn);
OleDbCommandBuilder objCommand = new OleDbCommandBuilder(objDA);
objDA.Fill(objDS, "imageGallery");
try
{
this._objConn.Open();
DataRow objDR = objDS.Tables["imageGallery"].NewRow();
objDR["Title"] = strTitle;
objDR["Data"] = bBuffer;
objDR["ContentType"] = strContentType;
objDR["Description"] = strDesc;
objDS.Tables["imageGallery"].Rows.Add(objDR);
//try to update the table to add the image
objDA.Update(objDS, "imageGallery");
}
catch (Exception ex){ return ex.Message; }
finally { this._objConn.Close(); }
return null;
}
Databasen ser då ut såhär:
fileID FileName FileSize Title ContentType Data Description
5 Humla image/jpeg Långa binära data My image description
Vilket är helt okej... Det betyder ju att min binära data har kommit in i databasen, precis som den ska.
Sedan när jag försöker hämta en bild med den här funktionen (se nedan) så får jag felet:
Exception Details: System.ArgumentNullException: Buffer cannot be null. Parameter name: buffer
Line 32:
Line 33: byte[] buffer = objDAL.getImage(imgID);
Line 34: System.IO.MemoryStream stream1 = new System.IO.MemoryStream(buffer, true);
Line 35: stream1.Write(buffer,0,buffer.Length);
Funktionen är:
private void Page_Load(object sender, System.EventArgs e)
{
DataAccessLayer objDAL = new DataAccessLayer();
int imgID;
try
{
imgID = int.Parse(Request.QueryString["id"]);
}
catch {
imgID = 5;
}
byte[] buffer = objDAL.getImage(imgID);
[b]System.IO.MemoryStream stream1 = new System.IO.MemoryStream(buffer, true); [/b]
stream1.Write(buffer,0,buffer.Length);
Bitmap m_bitmap = (Bitmap) Bitmap.FromStream(stream1,true);
Response.ContentType = "image/jpeg";
m_bitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
