webForumDet fria alternativet

System.Byte i databas --> lägg in bild

.NET

1 svar · 219 visningar · startad av echoSwe

Medlem sedan nov. 20041 189 inlägg
Frågan#1

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);      
		}
Medlem sedan nov. 20041 189 inlägg
#2

Löste problemet genom att bygga om strukturen helt och använda mig av en annan infallsvinkel.

250 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)