2024年3月17日发(作者:)

C#Form+Mysql数据库实现图片二进制流存储和读取

1. MySql数据库创建表格table

Sql语句:create table 表名(Number int(5),imagemediumblob);

表格中储存二进制图片的属性设为blob(一般mediumblob够用了)

2. 在C#Form窗体中添加个pictureBox控件,用来传递图片

3. 窗体连接数据库(怎么连接这里不做过多详解),在pictureBox控件中添加一张要储存的图片

4. 图片转入数据库代码:

if ( != null)

{

//实列化数据流imageStream

//注:在空间引用中添加using System.I0;

MemoryStream imageStream = newMemoryStream();

//把pictureBox控件中的图片转化成二进制流,储存到实列化的byte[] imageByte

(imageStream, );

byte[] imageByte = y();

//连接数据库并打开

MySqlConnection conn =

newMySqlConnection("server=localhost;database=test2;uid=root;pwd=123456;charset=gb2312

");

();

//在C#Form中写Sql语句,注:?imageByte前的?不能少,在MySql中用的是?,不能用@,@会导致存入的

数据为null,连接数据库的时候charset=gb2312不能少,少了可能会导致用?出现乱码的提示错误

MySqlCommand comm = newMySqlCommand("insert into 表名 values(1,?imageByte)",conn);

//把imageByte转成mediumblob类型储存

(newMySqlParameter("?imageByte", Blob, )).Value

= imageByte;

eNonQuery();

e();

();

e();

}

5. 图片以二进制流存入数据库后,调用读取图片

//连接数据库

MySqlConnection conn = newMySqlConnection("server=localhost;database=test2;uid=root;pwd=123456");

();

//Sql语句: Number是在创建table时候的字段

MySqlCommand comm = newMySqlCommand("select image from t3 where Number=1", conn);

MySqlDataReader dr = eReader();

if (())

{

//把从数据库读取的数据重新转成byte[]

byte[] imageByte = (byte[])dr[0];

//强制转换,如出现不能强制转换的错误,很有可能是读取的数据为null,即没有存图片数据到数据库中

//请仔细查找前面代码是否有细节出错的地方

//实列化数据流imageStream

MemoryStream imageStream = newMemoryStream(imageByte);

//二进制流数据重新转成图片

Image image = ream(imageStream);

赋值给picturebox1

= image;

}

e();

e();

();

e();

注:存储和读取在不同的窗体