//保存图片到数据库。 |
private void btnSetPhoto_Click(object sender, EventArgs e) |
{ |
//声明存放图片的字节数组 |
byte[] photo; |
//打开要保存图片的文件流 |
FileStream fs = new FileStream("Scence.bmp", FileMode.Open, FileAccess.Read); |
//创建字节流,对文件流进行读取操作 |
BinaryReader br = new BinaryReader(fs); |
//通过字节流读取文件,并返回给字节数组 |
photo = br.ReadBytes((int)fs.Length); |
|
//关闭字节流 |
br.Close(); |
//关闭文件流 |
fs.Close(); |
//创建数据库连接对象 |
SqlConnection conn = new SqlConnection(ConnectionConfig.getConnectionString2()); |
//组织SQL语句,将图片信息的存储以参数的方式设置 |
string strSql = "Update stuInfo Set stuPhoto = @stuPhoto Where stuNo ='QST001'"; |
//创建Command命令对象 |
SqlCommand comm = new SqlCommand(); |
//设置Command的连接对象 |
comm.Connection = conn; |
//设置Command要执行的SQL语句 |
comm.CommandText = strSql; |
//添加创建图片参数信息 |
SqlParameter para = comm.Parameters.Add("@stuPhoto", SqlDbType.Image); |
//设置图片的字节数组值给参数 |
para.Value = photo; |
//打开连接 |
conn.Open(); |
//执行SQL语句,返回影响数 |
int numUpdate = comm.ExecuteNonQuery(); |
//关闭连接 |
conn.Close(); |
|
richTextBox1.Text = string.Format("SQL语句“{0}”被执行!显示结果如下: \r", strSql); |
richTextBox1.Text = String.Format("更新了{0}条记录。", numUpdate.ToString()); |
|
} |
//数据库获取图片,显示在PictureBox控件中。 |
private void btnReadPhoto_Click(object sender, EventArgs e) |
{ |
//创建数据库连接对象 |
SqlConnection conn = new SqlConnection(ConnectionConfig.getConnectionString2()); |
//组织SQL语句 |
string strSql = "Select stuPhoto from stuInfo Where stuNo ='QST001'"; |
//创建Command命令对象 |
SqlCommand comm = new SqlCommand(); |
//设置Command的连接对象 |
comm.Connection = conn; |
//设置Command要执行的SQL语句 |
comm.CommandText = strSql; |
//打开连接 |
conn.Open(); |
//执行SQL语句,并返回SqlDataReader对象获取查询信息,参数表示:提供一种方法,以便 DataReader 处理包含带有大二进制值的列的行。 |
SqlDataReader reader = comm.ExecuteReader(CommandBehavior.SequentialAccess); |
|
StringBuilder strResult = new StringBuilder(); |
//读取数据流 |
while (reader.Read()) |
{ |
//设置字节缓存大小 |
int buffersize = 100; |
//设置读取二进制的字节索引位置 |
int startindexer = 0; |
//设置读取字节数 |
long retval; |
//创建缓冲字节 |
Byte[] buffer = new Byte[buffersize]; |
//创建内存流,将图片信息读取到内存中保存 |
MemoryStream ms=new MemoryStream(); |
//调用GetBytes()方法读取图片的信息,参数分别表示: |
//列序号; |
//字段中的索引,从其开始读取操作; |
//要将字节流读入的缓冲区; |
//buffer 中写入操作开始位置的索引; |
//要复制到缓冲区中的最大长度。 |
//返回值表示:读取的实际字节数 |
retval = reader.GetBytes(0, startindexer, buffer, 0, buffersize); |
//继续读取信息,每次读取100字节,指导实际读取字节不是100字节为止 |
while (retval == buffersize) |
{ |
//将字节信息写于内存流中,在内存中存放图片的二进制信息 |
ms.Write(buffer, 0, buffersize); |
|
ms.Flush(); |
|
startindexer += buffersize; |
//读取数据库中的二进制图片信息,每次读取100字节 |
retval = reader.GetBytes(0, startindexer, buffer, 0, buffersize); |
} |
|
ms.Write(buffer, 0, (int)retval ); |
ms.Flush(); |
|
|
//将内存流中的图片二进制信息,生成Bitmap图片对象 |
Bitmap image = new Bitmap(ms); |
//在图片框控件中,显示内存中的图片信息 |
this.picPhoto.Image = image; |
|
//关闭内存流 |
ms.Close(); |
|
} |
|
//关闭SqlDataReader数据流 |
reader.Close(); |
//关闭连接 |
conn.Close(); |
} |
转载于:https://www.cnblogs.com/haipy/p/3513270.html