请教一个图片存储到数据库以及读取的问题
今天无聊自己弄看看把图片存进数据库,以及从数据库读取,发现读取的时候页面就显示一个 X
附上代码,请教高手,帮忙看看是哪里出错了
代码没按照规范的3层架构写,敬请原谅~
就一个默认的Default 页面!
- C# code
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { #region 测试读取 try { string sqlCmd = "select * from Image where imageID = 1"; string connection = ConfigurationManager.ConnectionStrings["DBConn"].ConnectionString; SqlConnection sqlconn = new SqlConnection(connection); sqlconn.Open(); SqlCommand sqc = new SqlCommand(sqlCmd, sqlconn); SqlDataReader sdr = sqc.ExecuteReader(); if (sdr.Read()) { Response.ContentType = sdr["imageType"].ToString(); Response.BinaryWrite((byte[])sdr["imageData"]); sdr.Close(); sqlconn.Close(); } else { Response.Write("NULL"); } } catch(Exception ex) { Response.Write(ex.StackTrace); } finally { } #endregion } protected void Button1_Click(object sender, EventArgs e) { #region 测试写入 if (!FileUpload1.HasFile) { Response.Write("请选择图片"); } string fileEx = System.IO.Path.GetExtension(this.FileUpload1.FileName); //获取图片扩展名 if (fileEx != ".gif" && fileEx != ".jpg" && fileEx != ".jpeg" && fileEx!= ".bmp") { Response.Write("只能上传图片"); } else { // ImageType 有用,读取图片的时候需要 int imgSize = this.FileUpload1.PostedFile.ContentLength; //图片大小 (字节) string imgType = this.FileUpload1.PostedFile.ContentType; //图片类型 string imgPath = this.FileUpload1.PostedFile.FileName; //获取图片路径 string imgName = this.FileUpload1.FileName; //获取图片名字 int imgLength = this.FileUpload1.FileName.Length; //获取图片长度 if (imgLength <= 0)//判断是否有图片 return; Byte[] imgByte = new Byte[imgLength]; //用图片的长度来初始化一个字节数组存储临时的图片文件 Stream stream = this.FileUpload1.PostedFile.InputStream; //建立文件流对象 stream.Read(imgByte, 0, imgLength);// 读取图片数据到临时存储体imgByte,0为数据指针位置,fileLength为数据长度 try { string connection = ConfigurationManager.ConnectionStrings["DBConn"].ConnectionString; SqlConnection sqlconn = new SqlConnection(connection); sqlconn.Open(); string sqlcmd = "insert into Image values (@ImageType,@ImageData,@ImageTitle)"; SqlCommand sqc = new SqlCommand(sqlcmd, sqlconn); sqc.Parameters.Add("@ImageType", SqlDbType.VarChar, 50).Value = imgType; sqc.Parameters.Add("@ImageData", SqlDbType.Image, imgLength).Value = imgByte;//将二进制的图片赋值给@ImageData sqc.Parameters.Add("@ImageTitle", SqlDbType.VarChar, 50).Value = imgName; int result = sqc.ExecuteNonQuery(); sqlconn.Close(); if (result != 0) { Response.Write("OK"); } else { Response.Write("NO"); } } catch (Exception ex) { Response.Write(ex.StackTrace); } finally { } } #endregion }}
[解决办法]
string imgPath = this.FileUpload1.PostedFile.FileName; //获取图片路径 这里获取到的只是图片的名字,不是全部路径啊!!
[解决办法]
其实我觉得吧图片放在服务器上,让后数据库中只存放图片路径更好.
个人看法
[解决办法]
给楼主读取Image字段的页面,最简洁的代码:
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(@"server=.;database=yourbase;User ID=sa;Password=123456;Integrated Security=SSPI;");
conn.Open();
SqlCommand cmd = new SqlCommand("select image字段 from 你的表名 where id=xxx", conn);
Response.BinaryWrite((byte[])cmd.ExecuteScalar());
}