添加图片到数据库中
// 在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>");
}