如何在oracle数据库中保存和显示图片?

如何在oracle数据库中保存和显示图片?

//////////////////////////////////////保存图片到数据库//////////////////////////////////////////////////////////////////////////

#region 保存图片到数据库
/// <summary>
/// 保存图片到数据库
/// </summary>
/// <param name="strXh">学号</param>
/// <param name="strType">类型 (是否为修改相片)</param>
private void SavePic(string strXh)
{
//定义byte类型变量
if(Upload.PostedFile.FileName=="")
{
this.lblMessage.Text=" 提示:请选择要上传的学生相片";
return;
}
this.FilePath=Upload.PostedFile.FileName;
int len = Upload.PostedFile.ContentLength;
byte[] myblob = new byte[len];
Upload.PostedFile.InputStream.Read (myblob, 0, len);
OracleDataAdapter myoda;
OracleCommand cmd;
DataSet myds = new DataSet();
DataTable mydt = new DataTable();
DataRow mydr;
OracleConnection conn = new OracleConnection(conDBOracle);
string selesql;
selesql = "SELECT * FROM photo WHERE xh='" + strXh + "'";
cmd = new OracleCommand(selesql, conn);
myoda = new OracleDataAdapter(selesql, conn);
myoda.SelectCommand = cmd;
myoda.Fill(myds, "PHOTO");
if (myds.Tables[0].Rows.Count > 0)//修改照片
{
string updatesql = "UPDATE photo SET zp=:vPHOTO WHERE xh='" + strXh + "'";
OracleCommand updatecmd = new OracleCommand(updatesql, conn);
myoda.UpdateCommand = updatecmd;
myoda.UpdateCommand.Parameters.Add(":vPHOTO", OracleType.Blob, myblob.Length, "ZP");
myoda.MissingSchemaAction = MissingSchemaAction.AddWithKey;
myoda.FillSchema(myds, SchemaType.Source, "PHOTO");
myoda.Fill(myds, "PHOTO");
mydt = myds.Tables[0];
mydr = mydt.Rows[0];
string a = mydr["XH"].ToString();
mydr.BeginEdit();
mydr["XH"] = strXh;
mydr["ZP"] = myblob;
mydr.EndEdit();
int i=myoda.Update(myds, "PHOTO");
if(i>0)
{
conn.Close();
conn.Dispose();
myds.Clear();
myds.Dispose();
Response.Redirect("Main.aspx?StuNo="+strXh);
}
else
{
this.lblMessage.Text="提示:学生相片修改失败";
}
}
else//上传新照片
{
string insertsql = "INSERT INTO photo (xh,zp) VALUES ('" + strXh + "',:vPHOTO)";
OracleCommand insertcmd = new OracleCommand(insertsql, conn);
myoda.InsertCommand = insertcmd;
myoda.InsertCommand.Parameters.Add(":vPHOTO", OracleType.Blob, myblob.Length, "ZP");
myoda.MissingSchemaAction = MissingSchemaAction.AddWithKey;
myoda.FillSchema(myds, SchemaType.Source, "PHOTO");
myoda.Fill(myds, "PHOTO");
mydt = myds.Tables[0];
mydr = mydt.NewRow();
mydr.BeginEdit();
mydr["XH"] = strXh;
mydr["ZP"] = myblob;
mydr.EndEdit();
mydt.Rows.Add(mydr);
int i=myoda.Update(myds, "PHOTO");
if(i>0)
{
conn.Close();
conn.Dispose();
myds.Clear();
myds.Dispose();//释放资源
Response.Redirect("Main.aspx?StuNo="+strXh);
}
}
}
#endregion

/////////////////////////////////////////////////////////显示图片/////////////////////////////////////////////////////////////////////

#region 显示学生照片
/// <summary>
/// 显示学生照片
/// </summary>
/// <param name="Xh">学生学号</param>
private void ShowPic(string Xh)
{
if(Xh=="")//学号等于空时加一张空白图片
{
string strFilePath= Server.MapPath(".")+"//images//"+"nopic.gif";
System.IO.FileStream fs=new FileStream(strFilePath,System.IO.FileMode.Open,System.IO.FileAccess.Read);
Int32 len=(Int32)fs.Length;
byte[] bytephoto = new byte[len];
//bytephoto = (byte[])(myphotods.Tables[0].Rows[0]["ZP"]);
fs.Read(bytephoto,0,len);
MemoryStream stmPhoto = new MemoryStream(bytephoto);
System.Web.HttpContext.Current.Response.ContentType = "image/pjpeg";//这里须要改进
//将文件保存在系统指定的目录下,从而方便导入到Excle中
System.Drawing.Image image=System.Drawing.Image.FromStream(stmPhoto);
System.Drawing.Image _newimage = image.GetThumbnailImage( 100, 200, null, new System.IntPtr());
_newimage.Save( System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg );//这里须要改进
fs.Close();
stmPhoto.Close();//关闭
}
OracleDataAdapter oraAda;
DataSet myphotods = new DataSet();
OracleCommand cmd;
OracleConnection Con = new OracleConnection(conDBOracle);
string strSql;
strSql = "SELECT * FROM photo WHERE xh='" +Xh + "'";
cmd = new OracleCommand(strSql, Con);
oraAda = new OracleDataAdapter(strSql, Con);
oraAda.SelectCommand = cmd;
try
{
Con.Open();
oraAda.Fill(myphotods, "PHOTO");
if (myphotods.Tables[0].Rows.Count > 0)
{
byte[] bytephoto = new byte[0];
bytephoto = (byte[])(myphotods.Tables[0].Rows[0]["ZP"]);
MemoryStream stmPhoto = new MemoryStream(bytephoto);
System.Web.HttpContext.Current.Response.ContentType = "image/pjpeg";//这里须要改进
//将文件保存在系统指定的目录下,从而方便导入到Excle中
System.Drawing.Image image=System.Drawing.Image.FromStream(stmPhoto);
System.Drawing.Image _newimage = image.GetThumbnailImage( 100, 200, null, new System.IntPtr());
_newimage.Save( System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg );//这里须要改进
stmPhoto.Close();//关闭
this.SaveStuPic(Xh);
}
else//如果学生没有相片,添加一个临时图片
{
string strFilePath= Server.MapPath(".")+"//images//"+"nopic.gif";
System.IO.FileStream fs=new FileStream(strFilePath,System.IO.FileMode.Open,System.IO.FileAccess.Read);
Int32 len=(Int32)fs.Length;
byte[] bytephoto = new byte[len];
//bytephoto = (byte[])(myphotods.Tables[0].Rows[0]["ZP"]);
fs.Read(bytephoto,0,len);
MemoryStream stmPhoto = new MemoryStream(bytephoto);
System.Web.HttpContext.Current.Response.ContentType = "image/pjpeg";//这里须要改进
//将文件保存在系统指定的目录下,从而方便导入到Excle中
System.Drawing.Image image=System.Drawing.Image.FromStream(stmPhoto);
System.Drawing.Image _newimage = image.GetThumbnailImage( 100, 200, null, new System.IntPtr());
_newimage.Save( System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg );//这里须要改进
fs.Close();
stmPhoto.Close();//关闭
}
}
catch(Exception err)
{
Response.Write(err.ToString());

}
finally
{
myphotods.Dispose();
myphotods.Clear();
Con.Close();
Con.Dispose();
oraAda.Dispose();
GC.Collect();
}
}
#endregion