您的位置 首页 > 数码极客

c++windows窗体应用程序中如何向listbox中写入数据库

这是一个简单的向数据库中添加图片,显示图片的demo。

Demo中用到的数据库是sqlserver,其中有调用几个操作数据库的静态方法是我从自己写的一个sqlhelp静态类中提取出来的。

这里用到的功能比较少,所以我就没有将sqlhelp类贴出来了,如果有兴趣的朋友可以私信或者留下邮箱我发给你。

由于个人能力有限,难免会有遗漏或者不足之处,欢迎大家批评指正!

以下是具体实现步骤:

打开数据库管理软件sql server management studio 新建一个数据库,取名myPicData,如图:

打开visual studio 新建一个winform应用程序,在设计器中添加三个控件button listbox picturebox

  1. Button控件添加click事件,用来添加图片
  2. Listbox控件添加鼠标点击事件,用来显示数据库中的图片列表,点击列表中的item显示图片
  3. 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());

}

}

}

}

}

}

数据库中数据 如图:

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“c++windows窗体应用程序中如何向listbox中写入数据库”边界阅读