这是一个简单的向数据库中添加图片,显示图片的demo。
Demo中用到的数据库是sqlserver,其中有调用几个操作数据库的静态方法是我从自己写的一个sqlhelp静态类中提取出来的。
这里用到的功能比较少,所以我就没有将sqlhelp类贴出来了,如果有兴趣的朋友可以私信或者留下邮箱我发给你。
由于个人能力有限,难免会有遗漏或者不足之处,欢迎大家批评指正!
以下是具体实现步骤:
打开数据库管理软件sql server management studio 新建一个数据库,取名myPicData,如图:
打开visual studio 新建一个winform应用程序,在设计器中添加三个控件button listbox picturebox
- Button控件添加click事件,用来添加图片
- Listbox控件添加鼠标点击事件,用来显示数据库中的图片列表,点击列表中的item显示图片
- PictureBox控件用来显示图片,设置控件的BackgroundImageLayout属性为ImageLayout.Stretch
如图:
在窗口的load事件中判断数据库中是否有保存图片的表,如果没有则新建一个
//在数据库中新建一个pic_Table表用来保存添加的图片
string sql = @"CREATE TABLE pic_Table
(ID int NOT NULL IDENTITY(1,1) PRIMARY KEY, name nvarchar(50) NOT NULL, picture image NOT NULL, date datetime NOT NULL )";
//获取当前数据库中所有表
List<string> tableList = new List<string>();
GetTableInDatabase(tableList);
//判断pic_Table表(库存表)是否存在 没有则创建
if (!("pic_Table"))
{
ExecuteNonQuery(sql);
}
下面是listbox鼠标点击事件
两个操作数据库的静态方法
获取数据库的所有的表
从数据库中获取数据更新listbox列表
添加图片的方法我就不截图了,贴在后面的所有代码中
完整代码如下:
using System;
using Sy;
using Sy;
using Sy;
using Sy.SqlClient;
using Sy;
using Sy;
using Sy;
using Sy;
using Sy;
namespace 图片添加到数据库
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//连接数据库
private static readonly string constr = "server=19.41.238.68;database=myPicData;uid=sa;pwd=xia123456";
private void Form1_Load(object sender, EventArgs e)
{
//在数据库中新建一个pic_Table表用来保存添加的图片
string sql = @"CREATE TABLE pic_Table
(ID int NOT NULL IDENTITY(1,1) PRIMARY KEY, name nvarchar(50) NOT NULL, picture image NOT NULL, date datetime NOT NULL )";
//获取当前数据库中所有表
List<string> tableList = new List<string>();
GetTableInDatabase(tableList);
//判断pic_Table是否存在 没有则创建
if (!("pic_Table"))
{
ExecuteNonQuery(sql);
}
//将pictureBox控件的背景图片布局属性设置为平铺
= ImageLayout.Stretch;
//给listbox控件添加鼠标单击事件
+= listPic_MouseClick;
//从数据库中加载图片信息列表在listbox中
UpdatePicNameList();
}
//鼠标单击显示图片信息
void listPic_MouseClick(object sender, MouseEventArgs e)
{
if >= 0)
{
string sqlstr = "select * from [dbo].[pic_Table] where name = @picName";
SqlParameter par = new SqlParameter("@picName", SqlDbTy, 50) { Value = li().Trim() };
using (SqlDatareader reader = ExecuteReader(sqlstr, par))
{
if )
{
while ())
{
byte[] bytes = (byte[])reader["picture"];
using (MemoryStream stream = new MemoryStream(bytes))
{
= Image.FromStream(stream);
}
}
}
}
}
}
/// <summary>
/// 执行增 删 改 的方法
/// </summary>
/// <param name="sql"></param>
/// <param name="pms"></param>
/// <returns></returns>
public static int ExecuteNonQuery(string sql, params SqlParameter[] pms)
{
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (pms != null)
{
cmd.Parame(pms);
}
con.Open();
return cmd.ExecuteNonQuery();
}
}
}
/// <summary>
/// 返回多个值的方法
/// </summary>
/// <param name="sql"></param>
/// <param name="pms"></param>
/// <returns></returns>
public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] pms)
{
SqlConnection con = new SqlConnection(constr);
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (pms != null)
{
cmd.Parame(pms);
}
try
{
con.Open();
//Sy.CommandBehavior.CloseConnection这个枚举表示将来使用完毕SqlDataReader之后
//在关闭reader的同时,也会关闭con连接
return cmd.ExecuteReader(Sy.CommandBehavior.CloseConnection);
}
catch
{
con.Close();
con.Dispose();
throw;
}
}
}
/// <summary>
/// 获取当前数据库中所有表
/// </summary>
/// <param name="tableList"></param>
public static void GetTableInDatabase(List<string> tableList)
{
string sql = "SELECT OBJECT_NAME(id) FROM sysobjects WHERE xtype = 'U' AND OBJECTPROPERTY(id,'IsMSShipped')=0";
try
{
using (SqlDataReader reader = ExecuteReader(sql))
{
if )
{
while ())
{
(0));
}
}
}
}
catch (Exception ex)
{
Me);
}
}
//添加图片
private void btnAddPic_Click(object sender, EventArgs e)
{
OpenFileDialog openfile = new OpenFileDialog();
o = "选择一张不超过2MB的设备图片";
o = "高质量图片文件(*.jpg *.bmp *.png)|*.jpg;*.bmp;*.png";
oIndex = 1;
o = true;
if () == DialogRe)
{
try
{
string picPath = o;
using (FileStream stream = new FileStream(picPath, FileMode.Open, FileAcce))
{
//判断图片大小是否超过2MB
byte[] bytes = new byte[];
if > 1024 * 1024 * 2)
{
Me("图片超过设定的大小,请选择一张小于2MB的图片。");
}
else
{
#region
//打开图片
(bytes, 0, by);
= Image.FromFile(picPath);
//在数据库中查找图片名 判断是否存在同名图片
string sqlQuery = "select * from [dbo].[pic_Table] where name = @picName";
SqlParameter par = new SqlParameter("@picName", SqlDbTy) { Value = Pa(picPath) };
using (SqlDataReader reader = ExecuteReader(sqlQuery, par))
{
if )
{
//数据库中存在同名图片 进行更新处理
DialogResult result = Me("数据库中已经存在名称为: " + Pa(picPath) + " 的图片,如果需要更新图片请选择'Yes',退出请选择'取消'",
"提示", Me, Me);
if (result == Sy.DialogResult.Yes)
{
string sqlUpdate = "update [dbo].[pic_Table] set ( picture = @picBytes, date=@nowDate ) where name =@picName";
SqlParameter[] pars = new SqlParameter[]{
new SqlParameter("@picBytes", SqlDbTy ) { Value = bytes },
new SqlParameter("@picName", SqlDbTy, 50 ){ Value = Pa(picPath) },
new SqlParameter("@nowDate",SqlDbTy) { Value = Da() }
};
ExecuteNonQuery(sqlUpdate, pars);
}
else
{
return;
}
}
else
{
//数据库中没有同名图片 插入新的数据
string sqlInsert = "insert into [dbo].[pic_Table] (name, picture , date) Values (@picName,@picBytes,@nowDate)";
SqlParameter[] pars = new SqlParameter[]{
new SqlParameter("@picName", SqlDbTy, 50 ){ Value = Pa(picPath) },
new SqlParameter("@picBytes", SqlDbTy ) { Value = bytes },
new SqlParameter("@nowDate",SqlDbTy) { Value = Da()}
};
ExecuteNonQuery(sqlInsert, pars);
}
}
#endregion
}
}
Me("添加成功!");
UpdatePicNameList();
}
catch (Exception ex)
{
Me);
}
}
}
/// <summary>
/// 更新图片名称列表
/// </summary>
private void UpdatePicNameList()
{
li();
string sqlstr = "select name from [dbo].[pic_Table]";
using (SqlDataReader reader = ExecuteReader(sqlstr))
{
if )
{
while ())
{
li(reader["name"].ToString());
}
}
}
}
}
}
数据库中数据 如图: