应一位网友要求,做了一个将图片保存到数据库和从数据库读取图片的小程序。
源码如下:
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Text;
using
System.Windows.Forms;
using
System.Data.Sql;
using
System.Data.SqlClient;
using
System.IO;
namespace
ImageToDB {
public
partial
class
UserEdit : Form {
public
UserEdit() { InitializeComponent(); }
private
void
UserEdit_Load(
object
sender, EventArgs e) { LoadNextUser(); }
string
strConn
=
"
Data Source=wangyang\\SQLEXPRESS;Initial Catalog=test;Persist Security Info=True;User ID=uap;Password=uap
"
;
string
strGetTopOne
=
"
select top 1 * from users
"
;
///
<summary>
///
保存按钮事件
///
</summary>
///
<param name="sender"></param>
///
<param name="e"></param>
private
void
button2_Click(
object
sender, EventArgs e) {
if
(txtUserID.Text
==
""
||
txtUserID.Text
==
string
.Empty) {
//
新增
if
(txtUserName.Text
==
""
||
txtImagePath.Text
==
""
) { MessageBox.Show(
"
用户名和图片不能为空!
"
);
return
; }
//
这里看如何将图片保存到数据库的。
FileStream fs
=
File.OpenRead(txtImagePath.Text);
byte
[] imageb
=
new
byte
[fs.Length]; fs.Read(imageb,
0
, imageb.Length); fs.Close();
string
strSQL
=
"
insert into Users(UserName,UserImage)values(@UserName,@UserImage)
"
; SqlConnection con
=
new
SqlConnection(strConn); SqlCommand com3
=
new
SqlCommand(strSQL, con); com3.Parameters.Add(
"
@UserName
"
, SqlDbType.VarChar).Value
=
txtUserName.Text; com3.Parameters.Add(
"
@UserImage
"
, SqlDbType.Image).Value
=
imageb;
if
(com3.Connection.State
==
ConnectionState.Closed) com3.Connection.Open();
try
{ com3.ExecuteNonQuery(); MessageBox.Show(
"
新增用户成功!
"
); }
catch
{ MessageBox.Show(
"
新增用户失败!
"
); }
finally
{ com3.Connection.Close(); } }
else
{
//
修改
//
这里看如何将图片保存到数据库的。
string
strSQL
=
"
update users set username=@UserName
"
;
if
(txtImagePath.Text
!=
""
) strSQL
+=
"
,userimage=@UserImage
"
; SqlConnection con
=
new
SqlConnection(strConn); SqlCommand com3
=
new
SqlCommand(strSQL, con); com3.Parameters.Add(
"
@UserName
"
, SqlDbType.VarChar).Value
=
txtUserName.Text;
if
(txtImagePath.Text
!=
""
) { FileStream fs
=
File.OpenRead(txtImagePath.Text);
byte
[] imageb
=
new
byte
[fs.Length]; fs.Read(imageb,
0
, imageb.Length); fs.Close(); com3.Parameters.Add(
"
@UserImage
"
, SqlDbType.Image).Value
=
imageb; }
if
(com3.Connection.State
==
ConnectionState.Closed) com3.Connection.Open();
try
{ com3.ExecuteNonQuery(); MessageBox.Show(
"
修改用户成功!
"
); }
catch
{ MessageBox.Show(
"
修改用户失败!
"
); }
finally
{ com3.Connection.Close(); } } }
///
<summary>
///
下一位。
///
</summary>
///
<param name="sender"></param>
///
<param name="e"></param>
private
void
button4_Click(
object
sender, EventArgs e) {
string
preUserID
=
txtUserID.Text; LoadNextUser();
if
(txtUserID.Text
==
preUserID) MessageBox.Show(
"
已经是最后一位用户!
"
); }
///
<summary>
///
清空。
///
</summary>
///
<param name="sender"></param>
///
<param name="e"></param>
private
void
button1_Click(
object
sender, EventArgs e) { txtUserID.Text
=
""
; txtUserName.Text
=
""
; txtImagePath.Text
=
""
; pictureBox1.Image
=
null
; }
///
<summary>
///
选择图片。
///
</summary>
///
<param name="sender"></param>
///
<param name="e"></param>
private
void
btOpenImage_Click(
object
sender, EventArgs e) { openFileDialog1.Filter
=
"
JPEG|*.jpg|GIF|*.gif
"
;
if
(openFileDialog1.ShowDialog()
==
DialogResult.OK) { txtImagePath.Text
=
openFileDialog1.FileName; FileStream fs
=
File.OpenRead(txtImagePath.Text);
byte
[] imageb
=
new
byte
[fs.Length]; fs.Read(imageb,
0
, imageb.Length); fs.Close(); MemoryStream memStream
=
new
MemoryStream(imageb);
try
{ Bitmap myimge
=
new
Bitmap(memStream);
this
.pictureBox1.Image
=
myimge; }
catch
{ } } }
///
<summary>
///
从数据库中读取下一位用户的信息。如果参数为空则读取第一条信息。
///
</summary>
///
<param name="PreUserID"></param>
///
<returns></returns>
public
DataTable GetTopOneUser(
string
filter) { strGetTopOne
=
"
select top 1 * from users
"
;
if
(filter
!=
""
&&
filter
!=
string
.Empty) strGetTopOne
+=
filter; SqlConnection con
=
new
SqlConnection(strConn); SqlCommand com
=
new
SqlCommand(strGetTopOne, con);
if
(con.State
==
ConnectionState.Closed) con.Open(); SqlDataAdapter da
=
new
SqlDataAdapter(com); DataSet ds
=
new
DataSet(); da.Fill(ds,
"
UserTable
"
);
if
(ds
!=
null
&&
ds.Tables.Count
>
0
)
return
ds.Tables[
0
];
else
return
null
; }
///
<summary>
///
加载下一位用户信息
///
</summary>
public
void
LoadNextUser() {
//
这里看如何将数据库图片读出来
string
filter
=
""
;
if
(txtUserID.Text
!=
""
) filter
=
"
where userid>
"
+
txtUserID.Text; DataTable dt
=
GetTopOneUser(filter);
if
(dt.Rows.Count
==
0
)
return
; DataRow dr
=
dt.Rows[
0
]; txtUserID.Text
=
dr[
"
UserID
"
].ToString(); txtUserName.Text
=
dr[
"
UserName
"
].ToString();
byte
[] imageb
=
(
byte
[])dr[
"
UserImage
"
]; MemoryStream memStream
=
new
MemoryStream(imageb);
try
{ Bitmap myimge
=
new
Bitmap(memStream);
this
.pictureBox1.Image
=
myimge; }
catch
{ } }
///
<summary>
///
加载上一位用户信息
///
</summary>
public
void
LoadPreUser() {
string
filter
=
""
;
if
(txtUserID.Text
!=
""
) filter
=
"
where userid<
"
+
txtUserID.Text
+
"
order by Userid desc
"
; DataTable dt
=
GetTopOneUser(filter);
if
(dt.Rows.Count
==
0
)
return
; DataRow dr
=
dt.Rows[
0
]; txtUserID.Text
=
dr[
"
UserID
"
].ToString(); txtUserName.Text
=
dr[
"
UserName
"
].ToString();
byte
[] imageb
=
(
byte
[])dr[
"
UserImage
"
]; MemoryStream memStream
=
new
MemoryStream(imageb);
try
{ Bitmap myimge
=
new
Bitmap(memStream);
this
.pictureBox1.Image
=
myimge; }
catch
{ } }
///
<summary>
///
关闭。
///
</summary>
///
<param name="sender"></param>
///
<param name="e"></param>
private
void
button3_Click(
object
sender, EventArgs e) {
this
.Close(); }
///
<summary>
///
上一位
///
</summary>
///
<param name="sender"></param>
///
<param name="e"></param>
private
void
button5_Click(
object
sender, EventArgs e) {
string
preUserID
=
txtUserID.Text; LoadPreUser();
if
(txtUserID.Text
==
preUserID) MessageBox.Show(
"
已经是最前一位用户!
"
); }
///
<summary>
///
帮助。
///
</summary>
///
<param name="sender"></param>
///
<param name="e"></param>
private
void
linkLabel1_LinkClicked(
object
sender, LinkLabelLinkClickedEventArgs e) { help helper
=
new
help(); helper.Show(); } } }
界面如下:
说明:
不用担心数据库能不能存放下你保存的图片,数据库可以存放2GB大的图片,可以远远满足你的要求。
源码下载:
CODE 演示版:
DEMO
转载于:https://www.cnblogs.com/tuyile006/archive/2008/01/14/1037932.html