如何将图片插入到数据库中
存储过程_将图片存入数据库
一、写一个存储过程,将图片存入数据库中基本情况介绍:数据库版本:oracle 11g数据库用户:scott数据库密码:tigerJDK:1.6要导入的图片:D:\picture\1.jpg--创建存储图片的表CREATE TABLE IMAGE_LOB (T_ID V ARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL);--创建存储图片的目录CREATE OR REPLACE DIRECTORY IMAGES AS 'D:\picture';存储过程如下:CREATE OR REPLACE PROCEDURE IMG_INSERT (TID V ARCHAR2,FILENAME V ARCHAR2) ASF_LOB BFILE;--文件类型B_LOB BLOB;BEGINiNSERT INTO IMAGE_LOB (T_ID, T_IMAGE)V ALUES (TID,EMPTY_BLOB ()) RETURN T_IMAGE INTO B_LOB;--插入空的blobF_LOB:= BFILENAME ('IMAGES', FILENAME);--获取指定目录下的文件DBMS_LOB.FILEOPEN(F_LOB, DBMS_LOB.FILE_READONL Y);--以只读的方式打开文件DBMS_LOB.LOADFROMFILE (B_LOB, F_LOB,DBMS_LOB.GETLENGTH (F_LOB));--传递对象DBMS_LOB.FILECLOSE (F_LOB);--关闭原始文件COMMIT;END;--将该图片存入表call IMG_INSERT('1','1.gif'); 验证一下是否已存入:二、从数据库读取图片并显示在页面上项目名称为ShowPhoto启动Tomcat,在浏览器输入:http://localhost:8080/ShowPhoto/,显示如下:。
图片保存到mysql数据库
在我们设计和制作网站的过程中,有时把图片保存到数据库中要比存成文件的形式更加方便。
PHP和MySQL这对黄金组合可以很容易的实现上述功能。
在本文中,我们将会向读者介绍如何把图片保存到MySQL数据库中以及如何将数据库中的图片显示出来。
设置数据库我们通常在数据库中所使用的文本或整数类型的字段和需要用来保存图片的字段的不同之处就在于两者所需要保存的数据量不同。
MySQL数据库使用专门的字段来保存大容量的数据,数据类型为BLOB。
MySQL数据库为BLOB做出的定义如下:BLOB数据类型是一种大型的二进制对象,可以保存可变数量的数据。
BLOB具有四种类型,分别是TINYBLOB,BLOB, MEDIUMBLOB 和LONGBLOB,区别在于各自所能够保存的最大数据长度不同。
在介绍了所需要使用的数据类型之后,我们可以使用以下语句创建保存图象的数据表。
CREATE TABLE Images ( PicNum int NOT NULL AUTO_INCREMENT PRIMARY KEY, Image BLOB );编写上传脚本关于如何实现文件的上传,我们在这里就不再介绍了。
现在,我们主要来看一下如何接收上传文件并将其存入到MySQL数据库中。
具体的脚本代码如下,其中我们假定文件上传域的名称为Picture。
<? If($Picture != "none") { $PSize = filesize($Picture); $mysqlPicture = addslashes(fread (fopen($Picture, "r"), $PSize)); mysql_connect($host,$username,$password) or die("Unable to connect to SQL server"); @mysql_select_db($db) or die("Unable to select database"); mysql_query("INSERT INTO Images (Image) VALUES '($mysqlPicture')") or die("Can't Perform Query"); } else { echo"You did not upload any picture"; } ?>这样,我们就可以成功的把图片保存到数据库中。
将图片储存在MySQL数据库中的几种方法
将图⽚储存在MySQL数据库中的⼏种⽅法通常对⽤户上传的图⽚需要保存到数据库中。
解决⽅法⼀般有两种:1、将图⽚保存的路径存储到数据库;2、将图⽚以⼆进制数据流的形式直接写⼊数据库字段中。
以下为具体⽅法:⼀、保存图⽚的上传路径到数据库: string uppath="";//⽤于保存图⽚上传路径 //获取上传图⽚的⽂件名 string fileFullname = this.FileUpload1.FileName; //获取图⽚上传的时间,以时间作为图⽚的名字可以防⽌图⽚重名 string dataName = DateTime.Now.ToString("yyyyMMddhhmmss"); //获取图⽚的⽂件名(不含扩展名) string fileName = fileFullname.Substring(stIndexOf("\\") + 1); //获取图⽚扩展名 string type = fileFullname.Substring(stIndexOf(".") + 1); //判断是否为要求的格式 if (type == "bmp" || type == "jpg" || type == "jpeg" || type == "gif" || type == "JPG" || type == "JPEG" || type == "BMP" || type == "GIF") { //将图⽚上传到指定路径的⽂件夹 this.FileUpload1.SaveAs(Server.MapPath("~/upload") + "\\" + dataName + "." + type); //将路径保存到变量,将该变量的值保存到数据库相应字段即可 uppath = "~/upload/" + dataName + "." + type; }⼆、将图⽚以⼆进制数据流直接保存到数据库:引⽤如下命名空间:using System.Drawing; using System.IO; using System.Data.SqlClient; 设计数据库时,表中相应的字段类型为iamge 保存: //图⽚路径 string strPath = this.FileUpload1.PostedFile.FileName.ToString (); //读取图⽚ FileStream fs = new System.IO.FileStream(strPath, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs); byte[] photo = br.ReadBytes((int)fs.Length); br.Close(); fs.Close(); //存⼊ SqlConnection myConn = new SqlConnection("Data Source=.;Initial Catalog=stumanage;User ID=sa;Password=123"); string strComm = " INSERT INTO stuInfo(stuid,stuimage) VALUES(107,@photoBinary )";//操作数据库语句根据需要修改 SqlCommand myComm = new SqlCommand(strComm, myConn); myComm.Parameters.Add("@photoBinary", SqlDbType.Binary, photo.Length); myComm.Parameters["@photoBinary"].Value = photo; myConn.Open(); if (myComm.ExecuteNonQuery() > 0) { bel1.Text = "ok"; } myConn.Close(); 读取: ...连接数据库字符串省略 mycon.Open(); SqlCommand command = new SqlCommand("select stuimage from stuInfo where stuid=107", mycon);//查询语句根据需要修改 byte[] image = (byte[])command.ExecuteScalar (); //指定从数据库读取出来的图⽚的保存路径及名字 string strPath = "~/Upload/zhangsan.JPG"; string strPhotoPath = Server.MapPath(strPath); //按上⾯的路径与名字保存图⽚⽂件 BinaryWriter bw = new BinaryWriter(File.Open(strPhotoPath,FileMode.OpenOrCreate)); bw.Write(image); bw.Close(); //显⽰图⽚ this.Image1.ImageUrl = strPath; //采⽤这两种⽅式可以根据实际需求灵活选择。
如何使用MySQL进行图像和多媒体数据的存储
如何使用MySQL进行图像和多媒体数据的存储MySQL是一种常用的关系型数据库管理系统,广泛应用于各种应用和领域。
它提供了丰富的功能和灵活的存储选项,包括图像和多媒体数据的存储。
本文将探讨如何使用MySQL来有效地存储和管理图像和多媒体数据,以提高应用程序的性能和用户体验。
1. 导入图像和多媒体数据在MySQL中存储图像和多媒体数据的第一步是将这些数据导入到数据库中。
可以通过多种方式实现这一目标,其中一种常用的方法是使用BLOB类型。
BLOB是Binary Large Object的缩写,它允许将二进制数据以字节的形式存储在数据库中。
为了导入图像和多媒体数据,可以使用MySQL提供的LOAD_FILE()函数。
该函数可以将文件中的数据读取为二进制字符串,并将其插入到BLOB列中。
下面是一个示例代码:```INSERT INTO media_data (id, data)VALUES (1, LOAD_FILE('/path/to/image.jpg'));```在上述示例中,media_data是包含BLOB列的表名,id是数据的唯一标识符,data是BLOB列的名称。
通过指定正确的文件路径,可以将图像或多媒体文件插入到数据库中。
2. 使用合适的数据类型和存储格式除了BLOB类型外,MySQL还提供了其他几种数据类型和存储格式,用于存储图像和多媒体数据。
选择正确的数据类型和存储格式可以提高存储效率和访问性能。
一种常见的选择是使用VARCHAR类型存储图像和多媒体数据的URL或文件路径。
通过存储URL或文件路径,可以避免在数据库中存储大型二进制数据。
这种方法适用于将图像和多媒体数据存储在文件系统中,而不是直接存储在数据库中。
另一种选择是使用MEDIUMBLOB或LONGBLOB类型存储二进制数据。
MEDIUMBLOB可以存储最大为16MB的二进制数据,而LONGBLOB可以存储最大为4GB的二进制数据。
图片存入mySql数据库
我在程序代码里贴了向Mysql数据库写入image代码的程序,可是好多人都是Java的初学者,对于这段代码,他们无法将它转换成jsp,所以我在这在写一下用jsp怎样向数据库写入图像文件。
大家先在数据库建这样一张表,我下面的这些代码对任何数据库都通用,只要支持blob类型的只要大家将连接数据库的参数改一下就可以了。
SQL>create table image(id int,content varchar(200),image blob);如果在sqlserver2000的数据库中,可以将blob字段换为image类型,这在SqlServer2000中是新增的。
testimage.html文件内容如下:<HTML><HEAD><TITLE>Image File </TITLE><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></HEAD><FORM METHOD=POST ACTION="testimage.jsp"><INPUT TYPE="text" NAME="content"><BR><INPUT TYPE="file" NAME="image"><BR><INPUT TYPE="submit"></FORM><BODY></BODY></HTML>我们在Form的action里定义了一个动作testimage.jsp,它的内容如下:<%@ page contentType="text/html;charset=gb2312"%><%@ page import="java.sql.*" %><%@ page import="java.util.*"%><%@ page import="java.text.*"%><%@ page import="java.io.*"%><html><body><%Class.forName("org.gjt.mm.mysql.Driver").newInstance();Stringurl="jdbc:mysql://localhost/mysql?user=root&password=&useUnicode=true&characterEncoding= 8859_1";//其中mysql为你数据库的名字,user为你连接数据库的用户,password为你连接数据库用户的密码,可自己改Connection conn= DriverManager.getConnection(url);String content=request.getParameter("content");String filename=request.getParameter("image");FileInputStream str=new FileInputStream(filename);String sql="insert into test(id,content,image) values(1,?,?)"; PreparedStatement pstmt=dbconn.conn.prepareStatement(sql);pstmt.setString(1,content);pstmt.setBinaryStream(2,str,str.available());pstmt.execute();out.println("Success,You Have Insert an Image Successfully");%>下面我写一个测试image输出的例子看我们上面程序写的对不对,testimageout.jsp的内容如下:<%@ page contentType="text/html;charset=gb2312"%><%@ page import="java.sql.*" %><%@ page import="java.util.*"%><%@ page import="java.text.*"%><%@ page import="java.io.*"%><html><body><%Class.forName("org.gjt.mm.mysql.Driver").newInstance();Stringurl="jdbc:mysql://localhost/mysql?user=root&password=&useUnicode=true&characterEncoding= 8859_1";//其中mysql为你数据库的名字,user为你连接数据库的用户,password为你连接数据库用户的密码,可自己改Connection conn= DriverManager.getConnection(url);String sql = "select image from test where id=1";Statement stmt=null;ResultSet rs=null;try{stmt=conn.createStatement();rs=stmt.executeQuery(sql);}catch(SQLException e){}try {while(rs.next()) {res.setContentType("image/jpeg");ServletOutputStream sout = response.getOutputStream();InputStream in = rs.getBinaryStream(1);byte b[] = new byte[0x7a120];for(int i = in.read(b); i != -1;){sout.write(b);in.read(b);}sout.flush();sout.close();}}catch(Exception e){System.out.println(e);}%></body></html>你运行这个程序,你就会看到刚才你写入美丽的图片就会显示在你面前。
php插入和显示数据库中的图片
php插入和显示数据库中的图片(处理二进制数据)插入和显示数据库中的图片(处理二进制数据)数据库应用程序,特别是基于Web的数据库应用程序,常常会涉及到图片信息的存储和显示。
通常我们使用的方法是将所要显示的图片存在特定的目录下,在数据库中保存相应的图片的名称,然后在PHP中查询数据库获得文件路径并在HTML 文件中引用。
但是,如果我们想动态的显示图片,上述方法就不能满足需要了。
因此必须把图片存入数据库,然后通过编程动态地显示我们需要的图片。
在实际操作中,可以利用PHP将图片插入到数据库中,在数据库中,图片是以二进制格式存储的。
随后你也可以使用PHP将图片数据读出来并显示在网页上。
使用HTML表单可以将客户端的图片文件作为请求传递给服务端,PHP可以读取请求中的上载文件数据,并将数据保存在数据库中。
1.将图片插入数据库下面我们就来看一个范例,了解怎样使用表单提交图片文件,并保存到数据库中。
这个范例有两个文件组成。
upload.htm这个网页包含一个表单,用于提交图片文件,它的代码如下:代码清单7-6<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><title>提交表单</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> </head> <body><form action="insertPic.php" method="post" enctype="multipart/form-data" name="mainForm" id="mainForm"><input type="file" name="myFile" /><br /><input type="submit" name="Submit" value="Submit"/></form></body></html> 保存到Web根目录下,在浏览器中请求,可以看到如图7-33所示的效果:图7-33 文件上传表单insertPic.php这个文件用来将提交的文件数据保存到数据库中,代码如下:代码清单7-7<?php//由于上传过来的图片被保存在一个临时文件中,所以//我们仅需要读取该文件就可以获取传过来的图片$fp = fopen($_FILES["myFile"]["tmp_name"],"rb");$buf = addslashes(fread($fp,$_FILES["myFile"]["size"]));//创建一个PDO对象$dbh = new PDO("mysql:host=localhost;port=3306;dbname=myDatabase", "root", "verysecret");//执行插入操作并将结果保存在一个变量中$result = $dbh->query("INSERT INTO employees(firstName,lastName,EmpType,age,picture) VALUES('myFirst','myLast','myEmpType',50,'$buf')");//获取影响的行数if ($result->rowCount() >0) {echo("数据已插入。
如何将图片保存到SqlServer、Oracle、Access数据库中。-懒猫星空--...
如何将图片保存到SqlServer、Oracle、Access数据库中。
-懒猫星空--...如何将图片保存到SqlServer、Oracle、Access数据库中。
首先,我们要明白图片是以二进制的形式保存在数据库中的,那么把图片保存到数据库中的步骤大体上有这几步1.将图片转换为二进制数组(byte[]);2.把转换后的二进制数组(byte[])作为参数传递给要执行的Command;3.执行Command;首先,如何把图片转换成byte[],如果你使用的是2.0,那么你可以使用FileUpLoad控件来实现byte[] fileData = this.FileUpload1.FileBytes;如果你用的是1.1或者你在创建WinForm那么你可以使用下面的方法来把图片转换为byte[] public byte[] getBytes(string filePath){System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Open);byte[] imgData = new byte[fs.Length];fs.Read(imgData, 0, (int)fs.Length);return imgData;}1.SqlServer数据库。
SqlServer有Image字段类型,最大可以存储2G的数据。
byte[] fileData = this.FileUpload1.FileBytes;string sql = "insert into t_img(img) values (@img)";string strconn = System.Configuration.ConfigurationManager.ConnectionStrings[ "fengdongDB"].T oString();SqlConnection sqlConn = new SqlConnection(strconn);SqlCommand sqlComm = new SqlCommand(sql, sqlConn);sqlComm.Parameters.Add("@img", SqlDbType.Image);//添加参数sqlComm.Parameters["@img"].Value = fileData;//为参数赋值sqlConn.Open();sqlComm.ExecuteNonQuery();sqlConn.Close();2.Oracle数据库。
数据库存图片的几种方式
问题:数据库与照片/图片/文件的关系如何处理?也就是,比如有照片若干,怎样能在数据库中存储并显示?方法一:把照片放进数据库,照片的格式最好是bmp,这样就可以在窗体上显示出来,不过这样数据库的体积会暴增。
详细的使用方法请参考Access帮助中的PictureData 属性(本文末尾有相关帮助)。
而且,你可以直接用commdlg API 函数来给图像框赋值,然后直接读取某个图像框的PICTUREDATA 并存储到某个IMAGE 字段中。
这样做的优点是显示、读取方便,缺点是如果图片精度高,占用的硬盘空间会爆大。
详细示例请参考:/down/eg/OLEfieldAndPictureData.rar(46KB)方法二:设一个OLE字段,然后插入对象就行了(对着字段单击右键)。
但是要注意的是,用上述方法加入数据库的图片只能以手动方式保存,需要用程序读取的时候会碰到存储在ole字段中二进制数据与源文件不符的情况。
主要是因为ole引擎在图片的前面加了一段信息给他自己用。
请参考:/index.asp?board=4&mode=3&recordid=75FAB21E12DC方法三:将图片文件以二进制方式存储在数据库中,使用时调用。
详细情况请参考:使用ADO 的STREAM 对象的LoadFromFile 方法以及SaveToFile 方法实现:/index.asp?board=4&mode=3&recordid=74FAB51E13DC使用ADO 的RECORDSET.FIELD 对象的GetChunk 以及AppendChunk 方法实现:/index.asp?board=4&mode=3&recordid=75FAB01EASP 中使用的方法:/index.asp?board=4&mode=3&recordid=79FAB31E下列例程就是采用这种方法,在显示的时候把长二进制数据保存为临时文件用于显示/down/photo.rar(size=308K)方法四:不把照片放入数据库,只把照片的路径保存到数据库中,动态加载,这样可以支持很多种图片格式。
存储图片到SQLSERVER数据库中
存储图片到S Q L S E R V E R数据库中集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]如何存储图片到S Q L S E R V E R数据库中SQL Server提供了一个特别的数据类型:image,它是一个包含binary数据的类型。
下边这个例子就向你展示了如何将文本或照片放入到数据库中的办法。
在这篇文章中我们要看到如何在SQL Server中存储和读取图片。
1、建立一个表:在SQL SERVER中建立这样结构的一个表:列名类型目的ID Integer 主键IDIMGTITLE Varchar(50) 图片的标题IMGTYPE Varchar(50) 图片类型. 要以辨认的类型IMGDATA Image 用于存储二进制数据2、存储图片到SQL SERVER数据库中为了能存储到表中,你首先要上传它们到你的WEB 服务器上,你可以开发一个web form,它用来将客户端中TextBox web control中的图片入到你的WEB服务器上来。
将你的 encType 属性设置为:myltipart/formdata.string imgtitle = ;byte[] imgdata = new byte[imgdatalen];int n = (imgdata,0,imgdatalen);string connstr=((NameValueCollection)("appSettings"))["connstr"]; SqlConnection connection = new SqlConnection(connstr);SqlCommand command = new SqlCommand("INSERT INTO ImageStore(imgtitle,imgtype,imgdata)VALUES ( @imgtitle, @imgtype,@imgdata )", connection );SqlParameter paramTitle = new SqlParameter("@imgtitle", ,50 );= imgtitle;SqlParameter paramData = new SqlParameter( "@imgdata", );= imgdata;SqlParameter paramType = new SqlParameter( "@imgtype", ,50 );= imgtype;();int numRowsAffected = ();();3、从数据库中恢复读取现在让我们来从SQL Server中读取我们放入的数据吧!我们将要输出图片到你的浏览器上,你也可以将它存放到你要的位置。
介绍如何将图片存入数据库
本实例主要介绍如何将图片存入数据库。
将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStream类、BinaryReader把图片读成字节的形式,赋给一个字节数组,然后用ADO.SqlCommand对象的ExecuteNonQuery()方法来把数据保存到数据库中。
主要代码如下:private void button1_Click(object sender, EventArgs e){openFileDialog1.Filter = "*jpg|*.JPG|*.GIF|*.GIF|*.BMP|*.BMP";if(openFileDialog1.ShowDialog()==DialogResult.OK){string fullpath =openFileDialog1.FileName;//文件路径FileStream fs = new FileStream(fullpath, FileMode.Open);byte[] imagebytes =new byte[fs.Length];BinaryReader br = new BinaryReader(fs);imagebytes = br.ReadBytes(Convert.ToInt32(fs.Length));//打开数据库SqlConnection con = new SqlConnection("server=(local);uid=sa;pwd=;database=db_05");con.Open();SqlCommand com = new SqlCommand("insert into tb_08 values(@ImageList)",con);com.Parameters.Add("ImageList", SqlDbType.Image);com.Parameters["ImageList"].Value = imagebytes;com.ExecuteNonQuery();con.Close();}}本实例主要介绍如何从数据库中把图片读出来。
往MySQL中存储图片的方法
往MySQL中存储图⽚的⽅法1 介绍在设计到数据库的开发中,难免要将图⽚或⾳频⽂件插⼊到数据库中的情况。
⼀般来说,我们可以同过插⼊图⽚⽂件相应的存储位置,⽽不是⽂件本⾝,来避免直接向数据库⾥插⼊的⿇烦。
但有些时候,向MySQL中插⼊图⽚更加容易管理。
那么在MySQL中该怎么存储呢?参考资料[1]中有个相当清晰的例⼦,不过是基于MySQL图形界⾯的查询⼯具Query Brower的,你的机⼦上没有安装的话,可能得不到很好的理解。
我在这⾥不在赘述,更详细的资料请看给出的链接吧。
还有,[1]中的例⼦其实只是向我们说明了Query Brower的易⽤和强⼤,对我们在开发中实际应⽤不是很⼤。
所以下⾯就让我们⽤JAVA写⼀个向MySQL中存储的简单实例。
2 建表⾸先,先要在数据库中建表。
我在名为test的数据库下建⽴了⼀个叫pic的表。
该表包括3列,idpic, caption和img。
其中idpic 是主键,caption是对图⽚的表述,img是图像⽂件本⾝。
建表的SQL语句如下:DROP TABLE IF EXISTS `test`.`pic`;CREATE TABLE `test`.`pic` (`idpic` int(11) NOT NULL auto_increment,`caption` varchar(45) NOT NULL default '',`img` longblob NOT NULL,PRIMARY KEY (`idpic`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;将上⾯的语句输⼊到命令⾏中(如果安装了Query Brower,你可以按照参考[1]中的指⽰来建表,那样会更加⽅便。
),执⾏,表建⽴成功。
3 实现图像存储类表完成后,我们就开始写个Java类,来完成向数据库中插⼊图⽚的操作。
我们知道,Java与数据库连接是通过JDBC driver来实现的。
ASP.NET上传图片至数据库并显示图片...
上传图片至数据库并显示图片...今天,和大家讨论一下在中,如何上传图片至数据库,然后再将图片读取显示的问题。
欢迎高手提出自己的方法目前,我主要用到以下两种方法:1:上传图片的相对路径到数据库中相应字段里,读取显示时,将控件(假设用的是Image控件)的ImageUrl属性指向该相对路径即可。
2:将图片以二进制流的方式整体上传到数据库里,读取显示时,以二进制流的方式整体读出。
这种方法稍微麻烦一点,但保存的是图片整体到数据库里。
第一种方法,实现起来比较简单,因为存入数据库里的只是图片相对路径,当然,同时也就有很大的局限性,由于是相对路径,所以当本地的图片变换了位置或移除,或是在其他主机上浏览该图片时,就无法显示了。
第二种方法,就比较灵活了,可以用在交互性的页面,比如校友录,因为上传的是整张图片,所以只要读取正确,就能任何主机上显示出来。
下面,分别通过实际的代码,介绍这两种方法。
在这两个方法里,我将用到一个控件:FileUpload,该控件的具体用法参见百度谷歌。
学习过程中,最好的老师就是他们俩。
1:上传图片上传图片相对路径,并读取显示。
数据库里的字段很简单,就两个Image_ID int identity(1,1) primarykey not nullImage_Wpath varchar(50) nullImage_Wpath 用来保存图片的相对路径很简单的界面(其实是有点丑。
):点击查看大图这里注意,我需要上传的文件都放在文件夹“Image”,在后面的上传路径里就需要这个文件夹。
下面是效果图:点击查看大图我在输入框里填入Image_ID的值,读取指定的图片,在图片的下面,显示出该图片的相对路径。
接下来,我们看一下具体代码实现上传和读取显示功能。
在项目里,有一个sqlHelper类,是一些常用的数据访问方法。
这里就不详细讲了。
上传按钮里的事件:CODE:1.protected void Button1_Click(object sender, EventArgs e)2.3.{4.5.string name = FileUpload1.FileName;//获取文件名6.7.string type = name.Substring(stIndexOf(".") + 1);8.9.//获取文件类型10.11.string ipath = Server.MapPath("Image") + "\\" + n ame;12.13.//获取文件路径14.15.string wpath = "Image\\" + name;16.17.//[color=red]设置文件保存相对路径18.19.(这里的路径起始就是我们存放图片的文件夹名)[/color]20.21.22.23.string query1 = "insert into Images values24.25.('" + wpath + "')";26.27.28.29.if (type == "jpg" || type == "gif" ||30.31.type == "bmp" || type == "png")32.33.{34.35.FileUpload1.SaveAs(ipath); //服务器保存路径36.37.sqlHelper.ExecterNonQuery(query1);38.39.}40.41.}42.显示按钮事件:CODE:1.protected void Button2_Click(object sender, EventArgs e)2.3.{4.5.string query2 = "select * from Images where6.7.Image_ID=" + Convert.ToInt32(TextBox1.Text);8.9.SqlDataReader sdr = sqlHelper.GetReader(query2);10.11.string wpath2 = "";12.13.while (sdr.Read())14.15.{16.17.wpath2 = sdr[1].T oString();18.19.//获得相对路径20.21.}22.23.sdr.Close();24.25.Image1.ImageUrl = wpath2;26.27.//图片显示路径就是相对路径28.bel1.Text = wpath2; //显示相对路径30.31.}32.2:以二进制流的方式存入数据库,并读取显示图片。
将图片存入数据库
int j = 0;
FileStream fs=null;
for (int i = 1; i <= 13; i++) //利用循环添加一次添加图片
fs.Read(bt, 0, bt.Length); //读取图片的字节数
scmd.Parameters.Add("@b", SqlDbType.Image, (int)fs.Length);
scmd.Parameters["@b"].Value = bt; //将图片的字节数存入参数内
j = md.ExecuteNonQuery();
}
if (j > 0)
MessageBox.Show("将图片写入数据库成功!!!", "友好提示");
else
MessageBox.Show("将图片写入数据库失败!!!", "友好提示");
{
string sql = "insert into tb_Image values(@a,@b)"; //利用参数实现图片添加
scmd = new SqlCommand(sql, scon);
scmd.Parameters.Add("@a", SqlDbType.Int);
scmd.Parameters["@a"].Value = i; //记住该方法,将值存入参数内
byte[] bt = new byte[10240]; //初始化图片大小
如何把图片以二进制方式存入SQL Server数据库,并能读取出来
1、建所需数据库和表,语句如下:--建立数据库create database test--使用该数据库use test--建立存放图片的表create table piclist(id int Identity primary key,pic Image not null)2、制作上传图片的模块,代码如下:前台html代码:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UpPhoto.aspx.cs" Inherits="Test_UpPhoto" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml" ><head runat="server"><title>无标题页</title></head><body><form id="form1" runat="server"><div><input id="UpPhoto" name="UpPhoto" runat="server" type="file" /><asp:Button id="btnAdd" runat="server" Text="上传" OnClick="btnAdd_Click"></asp:Button> </div></form></body></html>后台代码:using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.IO;using System.Data.SqlClient;public partial class Test_UpPhoto : System.Web.UI.Pageprotected void Page_Load(object sender, EventArgs e){}protected void btnAdd_Click(object sender, EventArgs e){//获得图象并把图象转换为byte[]HttpPostedFile upPhoto = UpPhoto.PostedFile;int upPhotoLength = upPhoto.ContentLength;byte[] PhotoArray = new Byte[upPhotoLength];Stream PhotoStream = upPhoto.InputStream;PhotoStream.Read(PhotoArray, 0, upPhotoLength);//连接数据库string ConStr = "server=(local);user id=sa;pwd=sa;database=test";SqlConnection conn = new SqlConnection(ConStr);string strSql = "Insert into piclist(pic) values(@pic)";SqlCommand cmd = new SqlCommand(strSql, conn);cmd.Parameters.Add("@pic", SqlDbType.Image);cmd.Parameters["@pic"].Value = PhotoArray;conn.Open();cmd.ExecuteNonQuery();conn.Close();Response.Write("图片上传成功");}}3、制作显示图片的模块(单独显示图片,即没用到datalist):后台代码:using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;using System.IO;public partial class Test_ShowPhoto : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if(!Page.IsPostBack){//连接数据库string ConnStr = "server=(local);user id=sa;pwd=sa;database=test";string strSql = "select * from piclist";SqlConnection conn = new SqlConnection(ConnStr);conn.Open();SqlCommand cmd=new SqlCommand(strSql,conn);SqlDataReader reader = cmd.ExecuteReader();while (reader.Read()){Response.ContentType = "application/octet-stream";Response.BinaryWrite((Byte[])reader["pic"]);Response.Write("successful");}reader.Close();conn.Close();Response.End();}}}补充步骤3,用datalist显示图片方法:建立两个 页面,名称为piclist.aspx和StreamImg.aspx。
C读取写入图片到数据库精华
加密存储图片数据:使用加密算法对图片数据进行加密,确保数据在存储过程中的安全性。
验证用户身份:在读取和写入图片数据之前,验证用户的身份和权限,防止未经授权的用户访问和修改数据。
数据备份和恢复:定期备份图片数据,以防止数据丢失或损坏。同时,提供数据恢复功能,以便在数据出现问题时能够及时恢复。
数据访问控制:对图片数据的访问进行控制,确保只有授权用户才能访问和修改数据。
连接数据库并创建表格
读取图片文件
ቤተ መጻሕፍቲ ባይዱ
将图片文件转换为二进制数据
将二进制数据存储到数据库表格中
注意事项
图片格式:确保图片格式与数据库支持的格式相匹配
图片大小:避免上传过大的图片,以减少数据库存储压力
图片质量:在压缩图片时,要确保图片质量不会损失过多
安全性:对上传的图片进行安全检查,防止恶意图片或病毒
C写入图片到数据库
新技术和新方法的探索和研究
深度学习在图像识别中的应用
区块链技术在数据存储和传输中的潜力
云计算为图像处理和数据库提供更高效解决方案
未来可能出现的其他新技术和新方法
对未来发展的展望和预测
图像识别技术的进步将进一步提高C读取和写入图片到数据库的效率
云计算和大数据技术的普及将为C读取和写入图片到数据库提供更强大的支持
将图片数据转换为二进制格式
打开图片文件
将图片数据读取到内存中
将二进制数据写入到数据库中
注意事项
C读取和写入图片到数据库的精华
掌握C语言的基本操作
熟悉数据库的基本操作
数据库的插入和删除
数据库的连接和断开
数据库的查询和更新
数据库的索引和优化
了解图片的基本格式和编码方式
实物资产管理中的图片批量导入数据库的方法及系统
实物资产管理中的图片批量导入数据库的方法及系统在当今数字化的时代,企业对于实物资产的管理越来越依赖于信息化系统。
实物资产的管理不仅涉及到资产的基本信息,如名称、型号、价值等,还常常需要关联实物资产的图片,以便更直观、准确地进行识别和管理。
然而,如何将大量的实物资产图片批量导入数据库,成为了一个亟待解决的问题。
一、批量导入图片的重要性实物资产图片能够提供更直观、详细的资产信息。
通过图片,管理人员可以迅速了解资产的外观、状态,减少对文字描述的依赖,提高管理效率和准确性。
批量导入图片能够大大节省时间和人力成本,避免逐个处理图片的繁琐过程。
对于拥有大量实物资产的企业来说,这一点尤为重要。
二、图片批量导入数据库面临的挑战1、图片格式和大小的多样性实物资产图片可能来自不同的设备和来源,格式各异,如 JPEG、PNG 等,而且图片的大小也各不相同。
这就需要在导入过程中进行格式转换和大小调整,以适应数据库的存储要求。
2、数据准确性和一致性确保图片与对应的实物资产信息准确匹配,避免出现张冠李戴的情况。
同时,要保证所有图片的相关属性(如拍摄时间、拍摄地点等)在数据库中的记录保持一致。
3、数据库性能大量图片的同时导入可能会对数据库的性能造成影响,导致系统响应变慢甚至崩溃。
因此,需要优化导入过程,减少对数据库的压力。
4、网络传输问题如果图片需要通过网络传输到数据库服务器,网络的稳定性和带宽可能会成为限制因素,导致传输中断或延迟。
三、图片批量导入数据库的方法1、前端预处理在客户端对图片进行预处理,包括格式转换、大小调整、压缩等操作。
可以使用一些图像处理工具或库,如 ImageMagick、OpenCV 等,将图片统一转换为数据库支持的格式,并调整到合适的大小和分辨率。
同时,为每张图片生成唯一的标识符,以便与实物资产信息进行关联。
2、数据分批处理将大量的图片分成较小的批次进行导入。
这样可以避免一次性处理过多的数据导致数据库性能下降。
如何能将图片插入到大数据库中
试验十数据库编程1、新建项目项目名称为“dbgl”。
2、设计如下窗体:窗体上放置的控件有:7个按钮,一个groupBox,4个label,4个textBox,1个pictureBox和1个dataGridView。
3、编写连接数据库的类鼠标单击菜单栏上的“项目”选择“项目”菜单中的“添加类”命令,为“dbgl”项目添加连接数据库的类,类名是:DbConnection。
如下图所示:DbConnection类的代码如下图所示:注意需要引入System.Data.SqlClient名称空间。
4、编写操作数据的类为“dbgl”项目添加操作数据的类,该类名为“DbOperation”。
首先,实例化“DbConnection”类,代码如下:其次,编写方法getdataset,该方法返回一个DataSet对象的数据集。
代码如下:接着编写执行SQL语句的方法“sqlcmd”。
该方法的代码如下:最后编写方法“GetTable”,该方法用于返回一个DataTable类型的数据。
代码如下:5、为窗体编写代码,完成对数据库操作的功能。
在窗体的代码视图中:(1)定义一个窗体级别的BindingManagerBase类变量mybind用来管理多个控件绑定到一个数据源,以便实现同步操作。
代码如下:(2)在窗体的Load事件中编写,为相关控件绑定相数据。
代码如下:(3)为“第一条”按钮控件编写代码:代码如下图所示:(4)为“下一条”按钮控件编写代码:代码如下图所示:(5)为“上一条”按钮控件编写代码:代码如下图所示:(6)为“最后一条”按钮控件编写代码:代码(略)。
自己编写(7)给“新增”按钮编写代码,完成添加一条记录首先,给项目添加一个窗体,窗体名称为“FormBase”。
窗体中设计界面如下:该窗体的代码如下:1)引入红色框内的名称空间:2)定义窗体级变量,用来表示图片,代码如红色框内:3)编写显示图片的方法:代码如下:4)为“添加照片”的标签的单击事件编写如下代码:*以下是新增的内容****************************************** 为了防止用户连续单击“确定”按钮而引发异常,我们需要修改上面的代码:修改的思路是一旦数据保存成功,就清空文本框的值。
winform上传图片到数据库
方法一:在数据库中添加图片名字,然后把图片存在指定的文件夹中这种方法存起来简单,但是删除的时候麻烦。
存:在数据库中建一个文本字段(access)或者varchar字段(sqlserver)长度能放上一张图片即可过程:就是一般的存的insert into举个例子:sql数据库中有一个id字段自增类型一个name字段,用于存放图片名称的类型是varchar类型这winform界面中你可以拖动一个TextBox,用于存放路径,一个Button这个就不说了,还有一个openFileDialogif (this.openFileDialog1.ShowDialog() == DialogResult.OK){his.textBox1.Text = openFileDialog1.FileName;} //打开路径,必不可少的这些都是是在button单击事件里完成的if (openFileDialog1.FileName.Length > 0) // 判断openFileDialog1路径的长度{string oldName = openFileDialog1.FileName; //定义一个string类型的变量用于存放【文件路径】string[] splitName = oldName.Split('.'); //为获取文件的扩展名做准备的string ext = splitName[splitName.Length - 1]; //文件的扩展名if (ext == "jpg" || ext == "gif" || ext == "bmp" || ext == "JPG") //限制上传图片的格式{string dbName = DateTime.Now.ToString("yyyyMMddhhmmss") + "." + ext; //给上传的图片起个名字!以时间命名string newName = AppDomain.CurrentDomain.BaseDirectory + dbName; //新路径!这是个相对路径File.Copy(oldName, newName, true); //把文件从以前的路径复制到新的路径中去//下面就开始添加到数据库里面了string constring="";//数据库的连接字符串using (SqlConnection con=new SqlConnection (constring)){con.open();stirng sql="insert into shujukuname (name) values(@name)"; //因为id自增的这里只需要添加图片名称SqlCommand cmd = new SqlCommand(sql,con);cmd.Parameters.Add("@name",SqlDbType.VarChar).Value=TextBox1.Text.Trim();cmd.ExecuteNonQuery();con.Close();}}}//这样就添加完成了显示图片:这里一定要有一个PictureBox1要从数据库中取出这个nameusing (SqlConnection con=new SqlConnection (constring)){string sql="select name from shujukuname where id=' 1' ";//当id=1的时候查询的图片的名称SqlDataAdapter da = new SqlDataAdapter(sql, con);con.Open();DataTable dt=new DataTable();da.Fill(dt);string name =dt.Rows[0]["name"].ToString();con.Close(); //这样就获取出name来了,然后进行显示}string path=Application.StartupPath + "//"+ name; //一张图片的路径if(File.Exists(path)) //根据这个路劲显示有没有这张图片{PictureBox1.Image=Image.FromFile(path); //PictureBox1显示的path路径的图片}else{PictureBox1.Image=Image.FromFile(Application.StartupPath + "//" +默认图片); //PictureBox1显示的默认的的图片}winform 中往数据库中添加图片的两种方式之二:直接把图片添加在sqlserver中首先要有一个image或者binary类型的字段这种是以二进制形式插入到数据库中FileStream fs = new FileStream(pathName, System.IO.FileMode.Open, System.IO.FileAccess.Read);byte[] buffByte = new byte[fs.Length];fs.Read(buffByte, 0, (int)fs.Length);fs.Close(); //数据库字段为image类型,将图片转化为byte[],保存到数据库SqlConnection db = new SqlConnection(strConn);db.Open();string strSQL = "INSERT INTO shujuktable (name) values (@name) ";SqlCommand cmd = new SqlCommand(strSQL, db);cmd.Parameters.Add( "@name", SqlDbType.Image);cmd.Parameters[ "@name"].Value = buffByte;cmd.ExecuteNonQuery(); //保存图片的过程清理资源以上这部分是如何添加图片,下面这部分是读取图片-————————————————————————————————————————————————SqlConnection conn = new SqlConnection(strConn);DataTable dt = new DataTable();SqlDataAdapter adp = new SqlDataAdapter("select name from shujuktable where ID='1'", conn);adp.Fill(dt);byte[] buffByte = (byte[])dt.Rows[0][“name”];MemoryStream ms = new MemoryStream(buffByte);Image image = Image.FromStream(ms, true);this.pictureEdit1.Image = image;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
试验十数据库编程1、新建项目项目名称为“dbgl”。
2、设计如下窗体:窗体上放置的控件有:7个按钮,一个groupBox,4个label,4个textBox,1个pictureBox和1个dataGridView。
3、编写连接数据库的类鼠标单击菜单栏上的“项目”选择“项目”菜单中的“添加类”命令,为“dbgl”项目添加连接数据库的类,类名是:DbConnection。
如下图所示:DbConnection类的代码如下图所示:注意需要引入System.Data.SqlClient名称空间。
4、编写操作数据的类为“dbgl”项目添加操作数据的类,该类名为“DbOperation”。
首先,实例化“DbConnection”类,代码如下:其次,编写方法getdataset,该方法返回一个DataSet对象的数据集。
代码如下:接着编写执行SQL语句的方法“sqlcmd”。
该方法的代码如下:最后编写方法“GetTable”,该方法用于返回一个DataTable类型的数据。
代码如下:5、为窗体编写代码,完成对数据库操作的功能。
在窗体的代码视图中:(1)定义一个窗体级别的BindingManagerBase类变量mybind用来管理多个控件绑定到一个数据源,以便实现同步操作。
代码如下:(2)在窗体的Load事件中编写,为相关控件绑定相数据。
代码如下:(3)为“第一条”按钮控件编写代码:代码如下图所示:(4)为“下一条”按钮控件编写代码:代码如下图所示:(5)为“上一条”按钮控件编写代码:代码如下图所示:(6)为“最后一条”按钮控件编写代码:代码(略)。
自己编写(7)给“新增”按钮编写代码,完成添加一条记录首先,给项目添加一个窗体,窗体名称为“FormBase”。
窗体中设计界面如下:该窗体的代码如下:1)引入红色框内的名称空间:2)定义窗体级变量,用来表示图片,代码如红色框内:3)编写显示图片的方法:代码如下:4)为“添加照片”的标签的单击事件编写如下代码:*以下是新增的内容****************************************** 为了防止用户连续单击“确定”按钮而引发异常,我们需要修改上面的代码:修改的思路是一旦数据保存成功,就清空文本框的值。
具体代码如下:注意新增6、为“关闭”按钮编写如下代码,实现窗口关闭private void button2_Click(object sender, EventArgs e){this.Close();}7、当用户添加完数据,关闭窗口。
主窗口应该重新检索数据,把新增的数据显示出来。
为了实现该功能,我们返回到主窗口,找到打开FormBase窗口的代码:即:private void button1_Click(object sender, EventArgs e){FormBase fb = new FormBase();fb.ShowDialog();}修改上面的代码:修改后的代码:FormBase fb = new FormBase();fb.ShowDialog();if (fb.ShowDialog() == DialogResult.Cancel){//重新绑定数据DbOperation dbopt = new DbOperation();string sql = "select * from 学生信息表";DataTable db = dbopt.GetTable(sql);dataGridView1.DataSource = db;//当单击某一单元格时,选中该行this.dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; mybind = this.BindingContext[db];this.textBox1.DataBindings.Clear();this.textBox2.DataBindings.Clear();this.textBox3.DataBindings.Clear();this.textBox4.DataBindings.Clear();this.textBox1.DataBindings.Add("text", db, "学号");this.textBox2.DataBindings.Add("text", db, "姓名");this.textBox3.DataBindings.Add("text", db, "系别");this.textBox4.DataBindings.Add("text", db, "借书证号");//this.pictureBox1.DataBindings.Add("text", db, "照片");}8、在主窗口中为了能够正确显示图片,我们需要增加一个imageview()方法来显示图片。
该方法属于窗体。
方法的代码如下:private void imageview(){pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;//图片显示模式DbConnection connstr = new DbConnection();SqlConnection conn = connstr.getcon();conn.Open();SqlCommand cmd = new SqlCommand("select 照片 from 学生信息表 where 学号='" + this.textBox1.Text.Trim() + "'", conn);try{byte[] b = (byte[])cmd.ExecuteScalar();if (b.Length > 0){MemoryStream stream = new MemoryStream(b, true);stream.Write(b, 0, b.Length);pictureBox1.Image = new Bitmap(stream);stream.Close();}else{pictureBox1.Refresh();}}catch{}finally{cmd.Connection.Close();conn.Close();}}有了该方法后,我们需要在其他地方调用该方法。
需要调用的地方有:注意要加代码的地方已经加粗。
(1)private void Form1_Load(object sender, EventArgs e){//为dataGridView1绑定数据DbOperation dbopt = new DbOperation();string sql = "select * from 学生信息表";DataTable db = dbopt.GetTable(sql);dataGridView1.DataSource = db;//当单击某一单元格时,选中该行this.dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;mybind = this.BindingContext[db];this.textBox1.DataBindings.Add("text", db, "学号");this.textBox2.DataBindings.Add("text", db, "姓名");this.textBox3.DataBindings.Add("text", db, "系别");this.textBox4.DataBindings.Add("text", db, "借书证号");//this.pictureBox1.DataBindings.Add("text", db, "照片");imageview();}(2)private void button4_Click(object sender, EventArgs e){pictureBox1.Image = null;if (mybind.Position == 0){MessageBox.Show("已经是第一条了!");return;}else{mybind.Position = 0;imageview();}}private void button5_Click(object sender, EventArgs e) {pictureBox1.Image = null;if (mybind.Position == (mybind.Count-1)){MessageBox.Show("已经是最后一条了!");return;}else{mybind.Position = mybind.Position+1;imageview();}}private void button6_Click(object sender, EventArgs e) {pictureBox1.Image = null;if (mybind.Position == 0){MessageBox.Show("已经是第一条了!");return;}else{mybind.Position = mybind.Position - 1;imageview();}}(3)private void button1_Click(object sender, EventArgs e){FormBase fb = new FormBase();fb.ShowDialog();if (fb.ShowDialog() == DialogResult.Cancel){//重新绑定数据DbOperation dbopt = new DbOperation();string sql = "select * from 学生信息表";DataTable db = dbopt.GetTable(sql);dataGridView1.DataSource = db;//当单击某一单元格时,选中该行this.dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; mybind = this.BindingContext[db];this.textBox1.DataBindings.Clear();this.textBox2.DataBindings.Clear();this.textBox3.DataBindings.Clear();this.textBox4.DataBindings.Clear();this.textBox1.DataBindings.Add("text", db, "学号");this.textBox2.DataBindings.Add("text", db, "姓名");this.textBox3.DataBindings.Add("text", db, "系别");this.textBox4.DataBindings.Add("text", db, "借书证号");imageview();}}到目前为止,添加记录已经差不多了,如果还bug的话,希望同学们自己动手去修改。