添加图片到数据库中

// 在ASP.NET中用数据库保存图片,对一些产品图片管理是较为方便的;
// 不过相对来说技术问题可能比用文件保存图片要复杂一些;
// (首先要声明一下,偶是半路出家的和尚,)近来在学习这个图片处理的技术时;
// 总结了一下自己的学习心得,希望有大虾给予指教;

// 用SQL数据库保存图片

// SQL数据库表名:dmcimage ,字段:ImageNO int(4) (自动标识列),ImageContent Image

// 在ASPX页面上布置一个HTML控件,以获取图片;
// <input type="file" id="File1" runat="server" >
// 注意:runat="server" 不能省的;

// 用后台编码文件时,首先须获得对这个HTML控件的访问:
// public System.Web.UI.HtmlControls.HtmlInputFile File1;
 
 public void Button1_Click(object sender,EventArgs e)
 {
  // 这段代码是抄了人家的,意思偶不是太懂;
  // 不过自己这样子理解的:把图片转成二进制数据,保存在变量PhotoArray里;
  
  int intFile = File1.PostedFile.ContentLength;
  byte[] PhotoArray = new byte[intFile];
  System.IO.Stream PhotoStream = File1.PostedFile.InputStream;
  PhotoStream.Read(PhotoArray,0,intFile);  
  // 此时用Response.BinaryWrite(PhotoArray)即可将图片显示在网页上呢;
  
  // 将图片数据新增到数据库中;
  // 注意cmd.Parameters.Add("@ImageContent",SqlDbType.Image)中的SqlDbType.Image属性;
  
  string sqlConnectionString;
  sqlConnectionString = "server=(local);user id=yell;password='770925';database=yelldata";
  SqlConnection conn = new SqlConnection(sqlConnectionString);
  conn.Open();
  
  string strSQL;
  strSQL = "Insert into dmcimage(ImageContent) values(@ImageContent)";
  
  SqlCommand cmd = new SqlCommand(strSQL,conn);
  cmd.Parameters.Add("@ImageContent",SqlDbType.Image);
  cmd.Parameters["@ImageContent"].Value = PhotoArray;
  
  cmd.ExecuteNonQuery();  
  conn.Close();
 }
 
 // 用ACCESS数据库时的代码;数据库的字段:ImageNO (自动编号),ImageContent(OLE 对象);
 // 注意cmd.Parameters.Add("@ImageContent",OleDbType.LongVarBinary)用的是OleDbType.LongVarBinary属性;
 
 public void Button2_Click(object sender,EventArgs e)
 {
  int intFile = File1.PostedFile.ContentLength;
  byte[] PhotoArray = new byte[intFile];
  System.IO.Stream PhotoStream = File1.PostedFile.InputStream;
  PhotoStream.Read(PhotoArray,0,intFile);
  
  string oleConnectionString;
  oleConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;"
   + "Data Source=D:\\dmcweb\\mdb\\db1.mdb;"
   + "Persist Security Info=False;"
   + "Jet OLEDB:DataBase password='770925'";  
  OleDbConnection conn = new OleDbConnection(oleConnectionString);
  conn.Open();

  string strSQL;
  strSQL = "Insert Into dmcimage(ImageContent) values(@ImageContent)";  
  
  OleDbCommand cmd = new OleDbCommand(strSQL,conn);
  cmd.Parameters.Add("@ImageContent",OleDbType.LongVarBinary);
  cmd.Parameters["@ImageContent"].Value = PhotoArray;
  
  cmd.ExecuteNonQuery();  
  conn.Close();   
 }
 
 // 备注:按道理来说,用于ACCESS数据库的代码,用OLEDB连接SQL数据库时,应该也可以的;
 // 但是上述代码在用OLEDB连接SQL数据库时,运行时出现“必须声明变量@ImageContent”的错误;
 // 至于为什么会有这种错误,我也不知道了,哪位大虾能否明示下;
 // 后来我把代码改成如下,不论是连接ACCESS或SQL数据库,都可以使用。其他数据库不会用也没有试了; 
 
 // strSQL = "Insert Into dmcimage(ImageContent) values(?)";  
 // OleDbCommand cmd = new OleDbCommand(strSQL,conn);
 // cmd.Parameters.Add("?",PhotoArray);
 
 // 呵,这个代码连那个最难找的OleDbType.LongVarBinary的属性也不用了! 
 
 // 我们在获取图片时,有时希望得到图片文件的大小,还有图片的高度和宽度;
 
 // 获取图片文件的大小
 public void Button3_Click(object sender,EventArgs e)
 {
  // 获取图片大小,单位:KB
  int intFile = File1.PostedFile.ContentLength;
  Response.Write(intFile/1024 + "<br>");
  
  // 获取图片档案的目录地址;
  // 不知道可不可以用这种方式来获取图片的格式(最后三个字符):JPG GIF BMP;
  string ImagePath = File1.PostedFile.FileName;
  Response.Write(ImagePath + "<br>");
  
  // 获取图片的高度和宽度;
  System.Drawing.Image ImageName = System.Drawing.Image.FromFile(ImagePath);  
  Response.Write(ImageName.Width + "<br>");
  Response.Write(ImageName.Height + "<br>");  
  
 }

posted on 2006-02-15 15:54  yell  阅读(1131)  评论(0编辑  收藏  举报