技术要点:ASP.NET2.0实现添加图片到数据库中和从数据库中读取图片并显示图片等功能。
首先,通常用两种方法来向数据库存放图片,一是把图片的二进制信息存入数据库,二是在数据库中存放保存图片的路劲。 两种方法各有优缺点。
需要掌握的要点:
1.编写存储过程。
CREATE ALTER PROCEDURE Pr_AddPicture
(
@PictureDesn varchar(200), /*定义图片说明参数*/
@PictureType varchar(100), /*定义图片类型参数*/
@PictureData imag /*定义图片数据参数*/
)
AS
INSERT INTO Picture (PictureDesn,PictureType,PictureData) VALUES(@PictureDesn,@PictureType,@PictureData)
RETURN @@Identity /*返回最后一次插入的主键值。*/)
ALTER PROCEDURE Pr_GetSinglePicture
( @PictureID int)
AS
SELECT * FROM Picture WHERE PictureID=@PictureID
2.建立数据访问层类 PictureDB
public class PictureDB
{
private readonly string ConnectionString;
//用该方法来获取web.config里面的 ConnectionString.
public PictureDB() { ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); }
public int AddPicture(String sPictureDesn, byte[] bPictureData, String sPictureType)
{
SqlConnection conn = new SqlConnection(ConnectionString);
SqlCommand myCommand = new SqlCommand("Pr_AddPicture", conn);
myCommand.CommandType = CommandType.StoredProcedure;
SqlParameter parameterPictureDesn = new SqlParameter("@PictureDesn", SqlDbType.VarChar, 50);
parameterPictureDesn.Value = sPictureDesn;
myCommand.Parameters.Add(parameterPictureDesn);
SqlParameter parameterPictureData = new SqlParameter("@PictureData", SqlDbType.Image);
parameterPictureData.Value = bPictureData;
myCommand.Parameters.Add(parameterPictureData);
SqlParameter parameterPictureType = new SqlParameter("@PictureType", SqlDbType.VarChar, 50);
parameterPictureType.Value = sPictureType;
myCommand.Parameters.Add(parameterPictureType);
SqlParameter parameterPictureID= new SqlParameter("@PictureID", SqlDbType.Int,4);
parameterPictureID.Direction = ParameterDirection.ReturnValue;
myCommand.Parameters.Add(parameterPictureID);
try
{
conn.Open();
}
catch (System.Exception ex)
{
throw new Exception(ex.Message, ex);
}
try
{
myCommand.ExecuteNonQuery();
}
catch (System.Exception ex)
{
throw new Exception(ex.Message, ex);
}
finally{
if (conn.State==ConnectionState.Open){
conn.Close();
}
}
return (int)parameterPictureID.Value;
}
public SqlDataReader GetSinglePicture(int nPictureID)
{
SqlConnection conn = new SqlConnection(ConnectionString);
SqlCommand myCommand = new SqlCommand("Pr_GetSinglePicture", conn);
myCommand.CommandType = CommandType.StoredProcedure;
SqlParameter parameterPictureID = new SqlParameter("@PictureID", SqlDbType.Int, 4);
parameterPictureID.Value = nPictureID;
myCommand.Parameters.Add(parameterPictureID);
SqlDataReader dr = null;
try
{
conn.Open();
}
catch (System.Exception ex)
{
throw new Exception(ex.Message, ex);
}
try
{
dr = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (System.Exception ex)
{
throw new Exception(ex.Message, ex);
}
return dr;
}
}
从这里可以总结出 怎样 在ASP.net中执行存储过程并实行参数传递.牢记。
3.第三个重点就是怎样将图片转换成二进制并保存在数据库里。
PictureDB picture = new PictureDB();
Stream pictureStream = upfile.PostedFile.InputStream; //该对象指向一个上载文件,以准备读取该文件的内容
byte[] pictureData = new byte[upfile.PostedFile.ContentLength]; //ContentLength以字节为单位,获取上载文件大小。
try
{
pictureStream.Read(pictureData, 0, upfile.PostedFile.ContentLength); // 开始读取文件。
pictureID = picture.AddPicture(FileName.Text.Trim(), pictureData, upfile.PostedFile.ContentType);
sucessMessage.Text = "上传文件成功";
}
4.第四部就涉及到怎样将图片输出了,需要将数据库里的二进制数据读取出来并以图像的方式显示出来。这里我们用到了一个image控件,
讲该控件的ImageUrl属性指定为一个aspx页面,并在这个页面的pageload事件里写读取图像数据并显示。该事件代码:
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["PictureID"] != null) //这里用到了页面传值。ImageUrl就该写成 ~/showpicture.aspx?PictureID=
{
PictureDB picture = new PictureDB();
SqlDataReader recp = picture.GetSinglePicture(Int32.Parse(Request.QueryString["PictureID"].ToString()));
byte[] PictureData = null;
recp.Read();
PictureData = (byte[])recp["PictureData"];
Response.ContentType = recp["PictureType"].ToString(); //控制输出文件类型
recp.Close();
this.EnableViewState = false; //在提交服务器后是否保存页面状态。
Response.AppendHeader("Content-Length", PictureData.Length.ToString()); //向HTTP流中写入Content-Length
Response.BinaryWrite(PictureData); //像是图片的二进制数据。
Response.End();
}
到这就基本完成了!
5886

被折叠的 条评论
为什么被折叠?



