MySQL数据库之插入显示图片
图书馆系统项目需要用到好多图片,并且要求存入到数据库中,对这个特别感兴趣,于是上网查了资料,采用C#语言,进行了具体实现。
说明:
功能:往MySQL数据库插入并显示图片;
验证:执行插入功能后,我把该图片进行了本地的删除,然后执行显示功能,可以显示出来。
数据库该字段类型:longblob
- 原型部分
- 数据库
- 引用部分
/*
* 作者:周丽同
* 功能:简单实现往MySQL数据库插入显示图片;
* 日期:2016年6月1日11:32:35
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Drawing.Imaging;
- 窗体加载部分
private void Form1_Load(object sender, EventArgs e)
{
//获取当前窗体上的picturebox1里面的路径内容或者URL;
bool flag;
flag = ImageWrite(pictureBox1.ImageLocation);
//显示数据库里面存储的图片;
pictureBox2.Image = MapSearchQuery();
}
- 往MySQL数据库插入图片代码
/// <summary>
/// 将图片存入到数据库中
/// </summary>
/// <param name="strImagePath"></param>
/// <returns></returns>
public bool ImageWrite(string strImagePath)
{
//FileStream文件流;此部分需要引用:System.IO;
FileStream fs = new System.IO.FileStream(strImagePath, FileMode.Open, FileAccess.Read); //获得图片字节数组
byte[] byImage = new byte[fs.Length];
fs.Read(byImage, 0, byImage.Length);
fs.Close(); //数据库连接
MySqlConnection conn = new MySqlConnection();
conn.ConnectionString = "Server=localhost;uid=root;password=1;Database=librarysystem;"; //打开关闭连接
try
{
conn.Open();
}
catch
{
conn.Close();
conn.Dispose();
throw new ArgumentException("检索失败啦!");
} //判断数据库中内部有无记录
MySqlCommand cmd1 = new MySqlCommand();
//根据条件查询是否存在图片
string strQueryCmd = "select * from t_picture";
MySqlCommand cmdQuery = new MySqlCommand(strQueryCmd, conn);
MySqlDataReader dataReader = cmdQuery.ExecuteReader();
bool flag1 = dataReader.Read();
//关闭连接
cmd1.Dispose();
conn.Close();
conn.Dispose(); //此处如果涉及到两次对数据库的访问,一定要记得关闭上次的连接,然后再进行接下来对数据库的操作;
try
{
conn.Open();
}
catch
{
conn.Close();
conn.Dispose();
throw new ArgumentException("检索失败啦!");
}
//执行更新或插入操作操作
MySqlCommand cmd = new MySqlCommand();
if (flag1) //flag1是上面操心操作的结果
{
cmd.CommandText = "update t_picture set picture=@picture";
}
else
{
cmd.CommandText = "insert into t_picture(picture) values (@picture)";
} cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("@picture", MySqlDbType.LongBlob);
cmd.Parameters[0].Value = byImage;
cmd.Connection = conn; int affecteRows = 0;//初始化数据库操作的结果;
try
{
affecteRows = cmd.ExecuteNonQuery();//返回对数据库的执行结果;
}
catch
{
affecteRows = -1;
} //关闭连接等
cmd.Dispose();
conn.Close();
conn.Dispose(); if (affecteRows <= 0)
{
MessageBox.Show("保存失败!");
return false;
}
else
{
MessageBox.Show("保存成功!");
return true;
}
}
- 查询MySQL数据库存储的图片,并显示代码
/// <summary>
/// 对MySQL数据库图片进行显示
/// </summary>
/// <returns></returns>
public Image MapSearchQuery()
{
//声明图片数组
byte[] imageByteResulet;
imageByteResulet = null; //连接数据库
MySqlConnection conn = new MySqlConnection();
conn.ConnectionString = "Server=localhost;Uid=root;Password=1;Database=librarysystem;";
//对数据库进行开关闭
try
{
conn.Open();
}
catch
{
conn.Close();
conn.Dispose();
throw new ArgumentException("图片加载超时啦!");
}
//执行查询操作(可以根据具体条件下的图片进行查询显示)
string strQueryCmd = "select * from t_picture";
MySqlCommand cmd = new MySqlCommand(strQueryCmd, conn);
MySqlDataReader dataReader = null;
try
{
dataReader = cmd.ExecuteReader();
}
catch
{
dataReader.Dispose();
cmd.Dispose();
conn.Close();
conn.Dispose();
throw new ArgumentException("图片加载超时啦!");
} //声明接收返回值图片
Image imageResulet;
if (dataReader.Read())
{
//获取数据库中图片字节数组
imageByteResulet = new byte[dataReader.GetBytes(0, 0, null, 0, int.MaxValue)];
dataReader.GetBytes(0, 0, imageByteResulet, 0, imageByteResulet.Length); //// 将图片字节数组加载入到缓冲流
byte[] imageByte = imageByteResulet;
MemoryStream imageStream = new MemoryStream(imageByte); ////从缓冲流生成图片
imageResulet = Image.FromStream(imageStream, true);
return imageResulet;
}
else
{
imageResulet = null;
} dataReader.Dispose();
cmd.Dispose();
conn.Close();
conn.Dispose(); return imageResulet;
}
个人感觉这个方法不是最简单的,希望路过的大神,提出宝贵意见。
感谢您的宝贵时间···
MySQL数据库之插入显示图片的更多相关文章
- 第二百七十六节,MySQL数据库,【显示、创建、选定、删除数据库】,【用户管理、对用户增删改查以及授权】
MySQL数据库,[显示.创建.选定.删除数据库],[用户管理.对用户增删改查以及授权] 1.显示数据库 SHOW DATABASES;显示数据库 SHOW DATABASES; mysql - 用户 ...
- jmeter连接mysql数据库批量插入数据
前提工作: 1.在jmeter官网下载jmeter包(官网地址:https://jmeter.apache.org/).此外还需下载mysql驱动包,如:mysql-connector-java-5. ...
- Java程序向MySql数据库中插入的中文数据变成了问号
找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...
- mysql数据库中插入数据INSERT INTO SET的优势
往mysql数据库中插入数据.以前常用 INSERT INTO 表名 (列名1,列名2…) VALUES(列值1,列值2); 如果在PHP程序中,就会写成如下示例(往商品库里增加商品) $sql = ...
- java操作MySQL数据库(插入、删除、修改、查询、获取所有行数)
插播一段广告哈:我之前共享了两个自己写的小应用,见这篇博客百度地图开发的两个应用源码共享(Android版),没 想到有人找我来做毕设了,年前交付,时间不是很紧,大概了解了下就接下了,主要用到的就是和 ...
- 使用mysql数据库,插入数据出现问号(?)的问题,解决方法
首先,我用的mysql数据库是5.7.12版本. 出现的问题: 1.插入数据显示错误,插入不成功,出现:Incorrect string value: '\xCD\xF5\xD5\xBC\xBE\xA ...
- mysql数据库无法插入中文字符
分析原因:这是因为之前修改了数据库的编码,但数据表的编码却没有跟着改变导致的. 安装mysql 时,使用的是latin编码(随后修改为utf8).建的数据表是在latin编码下建立的.而jsp页面使用 ...
- [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...
- mysql数据库---同时插入两个表以上的数据
mysql数据库问题,如何同一个操作添加两个表(a表,b表),并把b表的id添加到a表字段中,b表id自动增长 在数据库中创建存储过程,比如存储过程的名字叫做 test在java中和正常使用sql的方 ...
随机推荐
- 【转】link_to中delete无效的问题解决
问题一 1.问题描述:点击[删除]链接之后,跳到了show页面,完全没有弹出框提示 <%= link_to "删除", product_path(product.id), : ...
- 2016.5.30让窗口处于最顶层的方法,比TopMost灵活
最简单的方法Form. Activate() 稍复杂的方法用API,目前没有看出比第一种方法有什么好处(可操作其它窗口,这就是好处2016.7.31) [System.Runtime.InteropS ...
- Centos 7.2 编译安装 git
一. 下载最新版GIT安装包: https://www.kernel.org/pub/software/scm/git/ 选择想要安装的版本,下载,解压 命令: .tar.gz $ cd git- 二 ...
- 01-20Asp.net--Linq语法
Linq语法--语言集成查询 同Sqlserver语句,但顺序颠倒了. 使用方法: 新建Linq类.dbml结尾的文件 在web窗体源代码中设计表,使用Repeater中转存放: <asp:Re ...
- 11-23网页基础--JavaScript基础知识
第一课 JavaScript简介 一.定义:JavaScript是脚本语言,需要宿主文件,它的宿主文件是html文件. JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 ...
- mysql如何开启远程连接(默认未开启,即使密码正确,仍然无法访问)
mysql如何开启远程连接 | 浏览:1846 | 更新:2015-03-11 20:19 1 2 3 4 5 6 分步阅读 百度经验:jingyan.baidu.com 大家在公司工作中,经常会遇到 ...
- ORA-00600:内部错误代码,参数:[kpnxdcbk-2],[],[],[],[],[],[],[],[],[],[],[]
由于最近工作中常出现ORA-00600:内部错误代码,参数:[kpnxdcbk-2],[],[],[],[],[],[],[],[],[],[],[]这种异常!所以在这里讲一下我的处理方法. 笔者所遇 ...
- java代码连接数据库
/** * * @author lidelin 2017-03-03 * 连接数据库简单实例 * 准备工作:建项目工程,例如:test-jdbc;导入odbc6.jar */ public class ...
- 探索Web Office Apps服务
老样子,先放几个官链: WOA部署规划:http://technet.microsoft.com/zh-cn/library/jj219435(v=office.15).aspx 拓扑规划:http: ...
- C++知识点总结(5)
1.为何静态成员函数不能调用非静态成员函数 静态成员函数可以不需要类的实例就直接使用,非静态的成员函数很可能用到一些成员变量,而成员变量的创建和初始化是在创建了类的实例时在构造函数调用的时候才进行的. ...