如何能将图片插入到大数据库中.docx
- 文档编号:8841463
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:22
- 大小:235.57KB
如何能将图片插入到大数据库中.docx
《如何能将图片插入到大数据库中.docx》由会员分享,可在线阅读,更多相关《如何能将图片插入到大数据库中.docx(22页珍藏版)》请在冰点文库上搜索。
如何能将图片插入到大数据库中
试验十数据库编程
1、新建项目项目名称为“dbgl”。
2、设计如下窗体:
窗体上放置的控件有:
7个按钮,一个groupBox,4个label,4个textBox,1个pictureBox和1个dataGridView。
3、编写连接数据库的类
鼠标单击菜单栏上的“项目”选择“项目”菜单中的“添加类”命令,为“dbgl”项目添加连接数据库的类,类名是:
DbConnection。
如下图所示:
DbConnection类的代码如下图所示:
注意需要引入System.Data.SqlClient名称空间。
4、编写操作数据的类
为“dbgl”项目添加操作数据的类,该类名为“DbOperation”。
首先,实例化“DbConnection”类,代码如下:
其次,编写方法getdataset,该方法返回一个DataSet对象的数据集。
代码如下:
接着编写执行SQL语句的方法“sqlcmd”。
该方法的代码如下:
最后编写方法“GetTable”,该方法用于返回一个DataTable类型的数据。
代码如下:
5、为窗体编写代码,完成对数据库操作的功能。
在窗体的代码视图中:
(1)定义一个窗体级别的BindingManagerBase类变量mybind用来管理多个控件绑定到一个数据源,以便实现同步操作。
代码如下:
(2)在窗体的Load事件中编写,为相关控件绑定相数据。
代码如下:
(3)为“第一条”按钮控件编写代码:
代码如下图所示:
(4)为“下一条”按钮控件编写代码:
代码如下图所示:
(5)为“上一条”按钮控件编写代码:
代码如下图所示:
(6)为“最后一条”按钮控件编写代码:
代码(略)。
自己编写
(7)给“新增”按钮编写代码,完成添加一条记录
首先,给项目添加一个窗体,窗体名称为“FormBase”。
窗体中设计界面如下:
该窗体的代码如下:
1)引入红色框内的名称空间:
2)定义窗体级变量,用来表示图片,代码如红色框内:
3)编写显示图片的方法:
代码如下:
4)为“添加照片”的标签的单击事件编写如下代码:
5)为“确定”按钮的单击事件编写如下代码,保存数据到数据库。
privatevoidbutton1_Click(objectsender,EventArgse)
{
stringxh=this.textBox1.Text.Trim();
stringxm=this.textBox2.Text.Trim();
stringxb=this.textBox3.Text.Trim();
stringjszh=this.textBox4.Text.Trim();
DbOperationdbop=newDbOperation();
if(xh=="")
{
MessageBox.Show("学号不能为空!
");
return;
}
else
{
stringsql="insertinto学生信息表(学号,姓名,系别,借书证号)values('"+xh+"','"+xm+"','"+xb+"','"+jszh+"')";
dbop.sqlcmd(sql);
}
if(pictureName!
="")
{
DbConnectiondbconn=newDbConnection();
SqlConnectionsqlconnection1=dbconn.getcon();
FileStreamstream=newFileStream(pictureName,FileMode.Open,FileAccess.Read);
buffer=newbyte[stream.Length];
stream.Read(buffer,0,(int)stream.Length);
stream.Close();
//
//图片写入数据库
stringmySelectQuery="UPDATE学生信息表set照片=@imgdatawhere学号='"+xh+"'";
SqlCommandmyCommand=newSqlCommand(mySelectQuery,sqlconnection1);
SqlParameterparamData=newSqlParameter("@imgdata",SqlDbType.Image);
paramData.Value=buffer;
myCommand.Parameters.Add(paramData);
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
}
}
*以下是新增的内容******************************************
为了防止用户连续单击“确定”按钮而引发异常,我们需要修改上面的代码:
修改的思路是一旦数据保存成功,就清空文本框的值。
具体代码如下:
注意新增的代码已经加粗。
privatevoidbutton1_Click(objectsender,EventArgse)
{
stringxh=this.textBox1.Text.Trim();
stringxm=this.textBox2.Text.Trim();
stringxb=this.textBox3.Text.Trim();
stringjszh=this.textBox4.Text.Trim();
DbOperationdbop=newDbOperation();
if(xh=="")
{
MessageBox.Show("学号不能为空!
");
return;
}
else
{
try
{
stringsql="insertinto学生信息表(学号,姓名,系别,借书证号)values('"+xh+"','"+xm+"','"+xb+"','"+jszh+"')";
dbop.sqlcmd(sql);
}
catch
{
}
finally
{
this.textBox1.Text="";
this.textBox2.Text="";
this.textBox3.Text="";
this.textBox4.Text="";
}
}
if(pictureName!
="")
{
DbConnectiondbconn=newDbConnection();
SqlConnectionsqlconnection1=dbconn.getcon();
FileStreamstream=newFileStream(pictureName,FileMode.Open,FileAccess.Read);
buffer=newbyte[stream.Length];
stream.Read(buffer,0,(int)stream.Length);
stream.Close();
//
//图片写入数据库
stringmySelectQuery="UPDATE学生信息表set照片=@imgdatawhere学号='"+xh+"'";
SqlCommandmyCommand=newSqlCommand(mySelectQuery,sqlconnection1);
SqlParameterparamData=newSqlParameter("@imgdata",SqlDbType.Image);
paramData.Value=buffer;
myCommand.Parameters.Add(paramData);
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
this.pictureBox1.Image=null;
}
}
6、为“关闭”按钮编写如下代码,实现窗口关闭
privatevoidbutton2_Click(objectsender,EventArgse)
{
this.Close();
}
7、当用户添加完数据,关闭窗口。
主窗口应该重新检索数据,把新增的数据显示出来。
为了实现该功能,我们返回到主窗口,找到打开FormBase窗口的代码:
即:
privatevoidbutton1_Click(objectsender,EventArgse)
{
FormBasefb=newFormBase();
fb.ShowDialog();
}
修改上面的代码:
修改后的代码:
FormBasefb=newFormBase();
fb.ShowDialog();
if(fb.ShowDialog()==DialogResult.Cancel)
{
//重新绑定数据
DbOperationdbopt=newDbOperation();
stringsql="select*from学生信息表";
DataTabledb=dbopt.GetTable(sql);
dataGridView1.DataSource=db;
//当单击某一单元格时,选中该行
this.dataGridView1.SelectionMode=DataGridViewSelectionMode.FullRowSelect;
mybind=this.BindingContext[db];
this.textBox1.DataBindings.Clear();
this.textBox2.DataBindings.Clear();
this.textBox3.DataBindings.Clear();
this.textBox4.DataBindings.Clear();
this.textBox1.DataBindings.Add("text",db,"学号");
this.textBox2.DataBindings.Add("text",db,"姓名");
this.textBox3.DataBindings.Add("text",db,"系别");
this.textBox4.DataBindings.Add("text",db,"借书证号");
//this.pictureBox1.DataBindings.Add("text",db,"照片");
}
8、在主窗口中为了能够正确显示图片,我们需要增加一个imageview()方法来显示图片。
该方法属于窗体。
方法的代码如下:
privatevoidimageview()
{
pictureBox1.SizeMode=PictureBoxSizeMode.StretchImage;//图片显示模式
DbConnectionconnstr=newDbConnection();
SqlConnectionconn=connstr.getcon();
conn.Open();
SqlCommandcmd=newSqlCommand("select照片from学生信息表where学号='"+this.textBox1.Text.Trim()+"'",conn);
try
{
byte[]b=(byte[])cmd.ExecuteScalar();
if(b.Length>0)
{
MemoryStreamstream=newMemoryStream(b,true);
stream.Write(b,0,b.Length);
pictureBox1.Image=newBitmap(stream);
stream.Close();
}
else
{
pictureBox1.Refresh();
}
}
catch
{
}
finally
{
cmd.Connection.Close();
conn.Close();
}
}
有了该方法后,我们需要在其他地方调用该方法。
需要调用的地方有:
注意要加代码的地方已经加粗。
(1)
privatevoidForm1_Load(objectsender,EventArgse)
{
//为dataGridView1绑定数据
DbOperationdbopt=newDbOperation();
stringsql="select*from学生信息表";
DataTabledb=dbopt.GetTable(sql);
dataGridView1.DataSource=db;
//当单击某一单元格时,选中该行
this.dataGridView1.SelectionMode=DataGridViewSelectionMode.FullRowSelect;
mybind=this.BindingContext[db];
this.textBox1.DataBindings.Add("text",db,"学号");
this.textBox2.DataBindings.Add("text",db,"姓名");
this.textBox3.DataBindings.Add("text",db,"系别");
this.textBox4.DataBindings.Add("text",db,"借书证号");
//this.pictureBox1.DataBindings.Add("text",db,"照片");
imageview();
}
(2)
privatevoidbutton4_Click(objectsender,EventArgse)
{
pictureBox1.Image=null;
if(mybind.Position==0)
{
MessageBox.Show("已经是第一条了!
");
return;
}
else
{
mybind.Position=0;
imageview();
}
}
privatevoidbutton5_Click(objectsender,EventArgse)
{
pictureBox1.Image=null;
if(mybind.Position==(mybind.Count-1))
{
MessageBox.Show("已经是最后一条了!
");
return;
}
else
{
mybind.Position=mybind.Position+1;
imageview();
}
}
privatevoidbutton6_Click(objectsender,EventArgse)
{
pictureBox1.Image=null;
if(mybind.Position==0)
{
MessageBox.Show("已经是第一条了!
");
return;
}
else
{
mybind.Position=mybind.Position-1;
imageview();
}
}
(3)
privatevoidbutton1_Click(objectsender,EventArgse)
{
FormBasefb=newFormBase();
fb.ShowDialog();
if(fb.ShowDialog()==DialogResult.Cancel)
{
//重新绑定数据
DbOperationdbopt=newDbOperation();
stringsql="select*from学生信息表";
DataTabledb=dbopt.GetTable(sql);
dataGridView1.DataSource=db;
//当单击某一单元格时,选中该行
this.dataGridView1.SelectionMode=DataGridViewSelectionMode.FullRowSelect;
mybind=this.BindingContext[db];
this.textBox1.DataBindings.Clear();
this.textBox2.DataBindings.Clear();
this.textBox3.DataBindings.Clear();
this.textBox4.DataBindings.Clear();
this.textBox1.DataBindings.Add("text",db,"学号");
this.textBox2.DataBindings.Add("text",db,"姓名");
this.textBox3.DataBindings.Add("text",db,"系别");
this.textBox4.DataBindings.Add("text",db,"借书证号");
imageview();
}
}
到目前为止,添加记录已经差不多了,如果还bug的话,希望同学们自己动手去修改。
接下来我们要做数据的编辑。
(9)当我们单击“编辑”按钮或或双击dataGridView1的一行时,打开编辑记录窗口。
实现步骤如下:
首先,给项目添加一个窗体,窗体名称为“FormEdit”。
窗体中设计界面如下
为了能够传递参数,我们编写一个静态类info,向项目中添加一个类,类名是:
info
为类info编写代码:
代码如下:
其次、双击“编辑”按钮编写如下代码:
接下来我们在编辑窗口的Load事件中编写如下代码:
privatevoidFormEdit_Load(objectsender,EventArgse)
{
this.textBox1.Text=info.xh;
this.textBox1.Enabled=false;//学号不能修改
this.textBox2.Text=info.xm;
this.textBox3.Text=info.xb;
this.textBox4.Text=info.jszh;
this.textBox4.Enabled=false;//借书证号不能修改
info.xh="";
info.xm="";
info.xb="";
info.jszh="";
//下面的代码获得图片
pictureBox1.SizeMode=PictureBoxSizeMode.StretchImage;
DbConnectionconnstr=newDbConnection();
SqlConnectionconn=connstr.getcon();
conn.Open();
SqlCommandcmd=newSqlCommand("select照片from学生信息表where学号='"+this.textBox1.Text.Trim()+"'",conn);
try
{
byte[]b=(byte[])cmd.ExecuteScalar();
if(b.Length>0)
{
MemoryStreamstream=newMemoryStream(b,true);
stream.Write(b,0,b.Length);
pictureBox1.Image=newBitmap(stream);
stream.Close();
}
else
{
pictureBox1.Refresh();
}
}
catch
{
////MessageBox.Show(ex.ToString());
//MessageBox.Show("该学生还没有附件扫描哦!
!
!
");
}
finally
{
cmd.Connection.Close();
conn.Close();
}
}
为了保存数据
先定义窗体变量用来保存图片:
他们是:
然后编写一个函数用来显示图片
为“修改图片”标签编写打开图片代码:
最后,为编辑窗口的“确定”按钮编写代码保存数据
privatevoidbutton1_Click(objectsender,EventArgse)
{
stringsql="update学生信息表set姓名='"+textBox2.Text+"',系别='"+textBox3.Text+"'where学号='"+textBox1.Text.Trim()+"'";
DbOperationdbop=newDbOperation();
dbop.sqlcmd(sql);
if(pictureName!
="")
{
DbConnectiondbconn=newDbConnection();
SqlConnectionsqlconnection1=dbconn.getcon();
FileStreamstream=newFileStream(pictureName,FileMode.Open,FileAccess.Read);
buffer=newbyte[stream.Length];
stream.Read(buffer,0,(int)stream.Length);
stream.Close();
//
//图片写入数据库
stringmySelectQuery="UPDATE学生信息表set照片=@imgdatawhere学号='"+textBox1.Text.Trim()+"'";
SqlCommandmyCommand=newSqlCommand(mySelectQuery,sqlconnection1);
SqlParameterparamData=newSqlParameter("@imgdata",SqlDbType.Image);
para
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何 图片 插入 数据库
![提示](https://static.bingdoc.com/images/bang_tan.gif)