用ASP.NET向数据库中存取图片

鉴于很多同学咨询,如何向数据库中存储并读取图片的方法.在此给出代码,供大家参考.但个人建议,尽量少向数据库中存储如此大二进制数据,会造成数据库过于膨胀,如果采用DataSet读取数据时,当数据量过大还会造成内存严重占用,尤其是在B/S程序设计中,后果会更明显,除非用户强烈要求.一般存储图片时,如无特殊要求,只需要在数据库中存储图片的相对路径即可,将真正的图片存储在指定的文件夹就OK了.当然,两种方式在不同的适用面都有自己的优缺点,下面几篇文章大家可以看看: 
以下是存储并显示图片的代码 
private void button1_Click(object sender, EventArgs e) //button1的Click事件
//存储图片的代码,需在界面添加按钮Button1,打开文件对话框openFileDialog1,列表框listBox1和图片控件pictureBox1,代码注释部分为SqlServer实现,非注释部分为Access实现,在Access中,数据库名为mydb.mdb,表名为photos,字段为photoid(文本类型,主键),photoimg(OLE对象类型,用于存图片) 
        { 
            openFileDialog1.Filter = "*jpg|*.jpg|*bmp|*.bmp|*gif|*.gif"; 
            if (openFileDialog1.ShowDialog() == DialogResult.OK) 
            { 
                string fullpath = openFileDialog1.FileName 
                FileStream fs = new FileStream(fullpath, FileMode.Open, FileAccess.Read); 
                byte[] imagebytes = new byte[fs.Length]; 
                BinaryReader br = new BinaryReader(fs); 
                imagebytes = br.ReadBytes(Convert.ToInt32(fs.Length));//把所选图片文件的流中的数据读入字节数组 
                OleDbConnection conn = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + Application.StartupPath + "[url=file://\\mydb.mdb]\\mydb.mdb[/url]"); 
                conn.Open(); 
                OleDbCommand cmd = new OleDbCommand("insert into photos values(@id,@Image)", conn); 
                cmd.Parameters.Add("@id", OleDbType.VarChar, 50); 
                cmd.Parameters.Add("@Image", OleDbType.Binary);//图片数据 
                cmd.Parameters["@id"].Value = DateTime.Now.Year.ToString() + DateTime.Now.Month + DateTime.Now.Day + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond; 
                cmd.Parameters["@Image"].Value = imagebytes;//为图片数据的SQL参数赋值 
                cmd.ExecuteNonQuery(); 
                conn.Close(); 
                //SqlConnection conn = new SqlConnection("server=LENOVO-B2A10C83;database=mydb;uid=sa;pwd=128126"); 
                //conn.Open(); 
                //SqlCommand cmd = new SqlCommand("insert into photos values(@id,@Image)", conn); 
                //cmd.Parameters.Add("@id", SqlDbType.VarChar, 50); 
                //cmd.Parameters.Add("@Image", SqlDbType.Image );//与ACCESS数据库唯一不同点 
                //cmd.Parameters["@id"].Value = DateTime.Now.Year.ToString() + DateTime.Now.Month + DateTime.Now.Day + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond; 
                //cmd.Parameters["@Image"].Value = imagebytes; 
                //cmd.ExecuteNonQuery(); 
                //conn.Close(); 
                MessageBox.Show("图片上传成功"); 
                bindListBox(); 
            } 
        } 
        private void bindListBox()//将photoId字段的数据显示在listBox1中,以便查看存入库中的每一个图片 
        { 
            OleDbConnection conn = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + Application.StartupPath + "[url=file://\\mydb.mdb]\\mydb.mdb[/url]"); 
            OleDbCommand cmd = new OleDbCommand("select photoid from photos"); 
            cmd.Connection = conn; 
            OleDbDataAdapter da = new OleDbDataAdapter(); 
            da.SelectCommand = cmd; 
            DataSet ds = new DataSet(); 
            da.Fill(ds); 
            listBox1.DataSource = ds.Tables[0].DefaultView;//设置listBox1的数据源 
            listBox1.DisplayMember = "photoid";//设置listBox1即将显示数据源中的哪个字段的数据 
            //SqlConnection conn = new SqlConnection("server=LENOVO-B2A10C83;database=mydb;uid=sa;pwd=128126"); 
            //SqlCommand cmd = new SqlCommand("select photoid from photos"); 
            //cmd.Connection = conn; 
            //SqlDataAdapter da = new SqlDataAdapter(); 
            //da.SelectCommand = cmd; 
            //DataSet ds = new DataSet(); 
            //da.Fill(ds); 
            //listBox1.DataSource = ds.Tables[0].DefaultView; 
            //listBox1.DisplayMember = "photoid";   
        } 
        private void Form1_Load(object sender, EventArgs e) //Form1的Load事件
        { 
            bindListBox();//程序加载时,先将数据库中现有的数据显示在listBox1中 
        } 
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)//listBox1的SelectedIndexChanged事件,当在listBox1中选择不同的photoId时,pictureBox1中显示该photoId对应的图片 
        { 
            OleDbConnection conn = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" + Application.StartupPath + "[url=file://\\mydb.mdb]\\mydb.mdb[/url]"); 
            OleDbCommand cmd = new OleDbCommand("select photoimg from photos where photoid='" + ((DataRowView)(listBox1.SelectedValue))[0] + "'");//将listBox1中选中的photoId所对应的图片数据从数据库中取出来 
            cmd.Connection = conn; 
            conn.Open(); 
            OleDbDataReader dr = cmd.ExecuteReader(); 
            dr.Read(); 
            byte[] b = (byte[])dr[0];//将图片数据转换成字节数组 
            MemoryStream stmBLOBData = new MemoryStream(b);//将该字节数组转换成内存流 
            pictureBox1.Image = Image.FromStream(stmBLOBData);//将该内存流转换成Image对象,并显示在pictureBox1中 
            //SqlConnection conn = new SqlConnection("server=LENOVO-B2A10C83;database=mydb;uid=sa;pwd=128126"); 
            //SqlCommand cmd = new SqlCommand("select photoimg from photos where photoid='" + ((DataRowView)(listBox1.SelectedValue))[0] + "'"); 
            //cmd.Connection = conn; 
            //conn.Open(); 
            //SqlDataReader dr = cmd.ExecuteReader(); 
            //dr.Read(); 
            //byte[] b = (byte[])dr[0]; 
            //MemoryStream stmBLOBData = new MemoryStream(b); 
            //pictureBox1.Image = Image.FromStream(stmBLOBData); 
        }
 
URL:http://zhidao.baidu.com/question/100993813.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET企业员工档案信息管理系统是一个基于ASP.NET技术开发的系统,用于管理企业员工的档案信息。这种系统主要是利用软件工程的方法,依据企业的需求,建立起一个完善的员工档案信息管理系统,实现员工信息的录入、查询、修改、删除等功能。 与之相比,开发SQL数据库web结构C编程则是一种使用C语言编写的与SQL数据库交互的web开发方式。借助C语言的强大功能和SQL数据库的高效性能,开发人员能够实现网站的后台逻辑处理、数据存取以及与数据库的交互操作。 两者在功能上有所区别。ASP.NET企业员工档案信息管理系统更加注重对员工档案信息的管理,包括录入、查询、修改、删除等操作,以及对员工信息的统计分析等功能。而开发SQL数据库web结构C编程则更加注重网站的后台逻辑处理和数据库的交互操作。 从技术角度来说,ASP.NET企业员工档案信息管理系统基于ASP.NET技术,结合数据库技术,能够实现动态页面的生成和服务器端的逻辑处理。而开发SQL数据库web结构C编程则需要掌握C语言和SQL语言,能够熟练地与数据库进行交互操作。 总的来说,ASP.NET企业员工档案信息管理系统和开发SQL数据库web结构C编程都是用于企业信息管理的技术手段,区别在于系统的功能重点和技术实现方式。根据具体的需求和开发要求,选择合适的技术方式来实现企业的信息管理是非常重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值