C#+VS2012图片二进制流与数据库MySql、水晶报表间的操作(二)
来源:互联网 发布:管家婆软件怎么样 编辑:程序博客网 时间:2024/05/18 02:14
读取本地图片,将图片以二进制流的形式存储到数据库中
1、成功访问到数据库;
2、设计Form1界面,从工具箱中添加一个按钮button1和一个画板panel1;
3、从本地读取图片的二进制流;
编写函数如下:
public byte[] imageBinary(string imagePath){ FileStream fs = new FileStream(imagePath, FileMode.Open, FileAccess.Read); int bytelen = (int)fs.Length; byte[] filebytes = new byte[bytelen]; fs.Read(filebytes,0,bytelen); fs.Close(); return filebytes;}
4、点击按钮,将读取到的图片二进制流显示到界面画板panel1中,并保存到数据库中。
代码如下:
private void button1_Click(object sender, EventArgs e){ panel1.BackgroundImage = Image.FromStream(new MemoryStream(fileBytes));//以二进制流形式显示图片 string strSql = "insert into image_path(id,image_path)values(@id,@image_path)"; Write(strSql, fileBytes); //将图片保存到指定表中}public int i = 1;public void Write(string strSql, byte[] imageBytes){ string connStr = "Server = localhost;Database = test;Uid = root;Pwd = 123456"; int id = i++; //每点击按钮插入一条记录,主键自增1 using (MySqlConnection conn = new MySqlConnection(connStr)) { try { conn.Open(); MySqlCommand cmd = conn.CreateCommand(); cmd.CommandText = strSql; cmd.Parameters.AddWithValue("@id", id); cmd.Parameters.Add("@image_path", MySqlDbType.LongBlob).Value = imageBytes; cmd.ExecuteNonQuery(); } catch (Exception e) { MessageBox.Show(e.Message); } }}
数据库test中的表image_path结构如下:
`id` int(10) NOT NULL,`image_path` longblob, PRIMARY KEY (`id`)
注意,存入表中的图片二进制流比较大,字段image_path可设置为Blob类型(单位:字节),用于存储二进制数据:
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
可根据需要存储的图片大小选择
需要注意的是,MySql系统默认存储数据量为1M,存储大于1M的二进制数据需手动修改参数max_allowed_packet的值,修改方法如下:
set global max_allowed_packet = 2*1024*1024*10; //设置MySql存储数据量最大为20Mshow VARIABLES like '%max_allowed_packet%'; //查看下max_allowed_packet是否修改成功
也可在my.cnf文件中找到max_allowed_packet进行修改。
完整代码如下:
Form1.cs:
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.MySqlClient;namespace ImageSqlTest{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { byte[] fileBytes = imageBinary("d:\\pic\\1.jpg"); panel1.BackgroundImage = Image.FromStream(new MemoryStream(fileBytes)); string strSql = "insert into image_path(id,image_path)values(@id,@image_path)"; Write(strSql, fileBytes); } //将图片二进制流写入数据库中 public int i = 1; private void Write(string strSql, byte[] imageBytes) { string connStr = "Server = localhost;Database = test;Uid = root;Pwd = 123456"; int id = i++; using (MySqlConnection conn = new MySqlConnection(connStr)) { try { conn.Open(); MySqlCommand cmd = conn.CreateCommand(); cmd.CommandText = strSql; cmd.Parameters.AddWithValue("@id", id); cmd.Parameters.Add("@image_path", MySqlDbType.LongBlob).Value = imageBytes; cmd.ExecuteNonQuery(); } catch (Exception e) { MessageBox.Show(e.Message); } } } }}
运行结果如下:
界面显示:
数据库中的表image_path内容如下(本文点击了两次,则存了两条记录):
到此,成功以图片二进制流读取显示到界面并保存到数据库中。
阅读全文
0 0
- C#+VS2012图片二进制流与数据库MySql、水晶报表间的操作(二)
- C#+VS2012图片二进制流与数据库MySql、水晶报表间的操作(一)
- C#+VS2012图片二进制流与数据库MySql、水晶报表间的操作(三)
- 水晶报表的一些操作
- vb2005+水晶报表10.2+MSSQL 二进制图片保存及显示
- VS2012用水晶报表还行,VS2013后水晶报表的方向如何?
- 【水晶报表之图片篇-a】 动态加载图片(图片文件版本及数据库版本)
- 【水晶报表之图片篇-a】 动态加载图片(图片文件版本及数据库版本)
- 水晶报表注册码(收藏与详细操作)
- 水晶报表中如何动态加载图片(图片文件版本及数据库版本)
- 如何操作水晶报表里的对象
- 水晶报表显示图片
- 水晶报表--显示图片
- 水晶报表:图片显示
- Mysql数据库与sql语言(二)--数据库的基本操作
- 取消水晶报表的数据库登陆框
- 去掉水晶报表的数据库验证界面
- 水晶报表(子报表的使用)
- Simple Merkle Hash Tree implemented in Python
- 9.1【祝副队去俄罗斯旅游愉快】
- linux 设备树
- 企业实训day5
- 【iOS】RxSwift官方Example3--地理位置监听
- C#+VS2012图片二进制流与数据库MySql、水晶报表间的操作(二)
- 小屏幕控制 (类似lol小地图)
- 字符串练习17_字符串判等
- 3、IP网际协议
- HDU-3068 最长回文串
- 字符串练习18_验证子串
- css清除浮动float总结
- python --- 处理很长的判断语句,多重赋值,联合删除
- Oracle用户和权限