如何将图片插入到数据库中
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
试验十数据库编程
1、新建项目项目名称为“d bgl”。
2、设计如下窗体:
窗体上放置的控件有:7个按钮,一个groupBox,4个label,4个textBox,1个pictureBo x和1个d ataGr idVie w。
3、编写连接数据库的类
鼠标单击菜单栏上的“项目”选择“项目”菜单中的“添加类”命令,为“dbgl”项目添加连接数据库的类,类名是:DbConn ectio n。
如下图所示:
DbConn ectio n类的代码如下图所示:注意需要引入Sy ste m.Data.SqlCli ent名称空间。
4、编写操作数据的类
为“dbgl”项目添加操作数据的类,该类名为“DbOper ation”。
首先,实例化“DbConn ectio n”类,代码如下:
其次,编写方法ge tdata set,该方法返回一个DataSet对象的数据集。
代码如下:
接着编写执行SQL语句的方法“sqlcmd”。
该方法的代码如下:
最后编写方法“GetTab le”,该方法用于返回一个Da taTab le类型的数据。
代码如下:
5、为窗体编写代码,完成对数据库操作的功能。
在窗体的代码视图中:
(1)定义一个窗体级别的Bi nding Manag erBas e类变量m ybind用来管理多个控件绑定到一个数据源,以便实现同步操作。
代码如下:
(2)在窗体的Lo ad事件中编写,为相关控件绑定相数据。
代码如下:
(3)为“第一条”按钮控件编写代码:代码如下图所示:
(4)为“下一条”按钮控件编写代码:代码如下图所示:
(5)为“上一条”按钮控件编写代码:代码如下图所示:
(6)为“最后一条”按钮控件编写代码:代码(略)。
自己编写
(7)给“新增”按钮编写代码,完成添加一条记录
首先,给项目添加一个窗体,窗体名称为“FormBa se”。
窗体中设计界面如下:
该窗体的代码如下:
1)引入红色框内的名称空间:
2)定义窗体级变量,用来表示图片,代码如红色框内:
3)编写显示图片的方法:代码如下:
4)为“添加照片”的标签的单击事件编写如下代码:
*以下是新增的内容****************************************** 为了防止用户连续单击“确定”按钮而引发异常,我们需要修改上面的代码:修改的思路是一旦数据保存成功,就清空文本框的值。
6、为“关闭”按钮编写如下代码,实现窗口关闭
privat e void button2_Cli ck(object sender, EventA rgs e)
{
this.Close();
}
7、当用户添加完数据,关闭窗口。
主窗口应该重新检索数据,把新增的数据显示出来。
为了实现该功能,我们返回到主窗口,找到打开F
ormBas e窗口的代码:
即:
privat e void button1_Cli ck(object sender, EventA rgs e)
{
FormBa se fb = new FormBa se();
fb.ShowDi alog();
}
修改上面的代码:修改后的代码:
FormBa se fb = new FormBa se();
fb.ShowDi alog();
if (fb.ShowDi alog() == Dialog Resul t.Cancel)
{
//重新绑定数据
DbOper ation dbopt= new DbOper ation();
string sql = "select * from 学生信息表";
DataTa ble db = dbopt.GetTab le(sql);
dataGr idVie w1.DataSo urce= db;
//当单击某一单元格时,选中该行
this.dataGr idVie w1.Select ionMo de = DataGr idVie wSele ction Mode.FullRo wSele ct; mybind = this.Bindin gCont ext[db];
this.textBo x1.DataBi nding s.Clear();
this.textBo x2.DataBi nding s.Clear();
this.textBo x3.DataBi nding s.Clear();
this.textBo x4.DataBi nding s.Clear();
this.textBo x1.DataBi nding s.Add("text", db, "学号");
this.textBo x2.DataBi nding s.Add("text", db, "姓名");
this.textBo x3.DataBi nding s.Add("text", db, "系别");
this.textBo x4.DataBi nding s.Add("text", db, "借书证号");
//this.pictur eBox1.DataBi nding s.Add("text", db, "照片");
}
8、在主窗口中为了能够正确显示图片,我们需要增加一个imagevie w()方法来显示图片。
该方法属于窗体。
方法的代码如下:
privat e void imagev iew()
{
pictur eBox1.SizeMo de = Pictur eBoxS izeMo de.Stretc hImag e;//图片显示模式DbConn ectio n connst r = new DbConn ectio n();
SqlCon necti on conn = connst r.getcon();
conn.Open();
SqlCom mandcmd = new SqlCom mand("select照片 from 学生信息表 where学号='" + this.textBo x1.Text.Trim() + "'", conn);
try
{
byte[] b = (byte[])cmd.Execut eScal ar();
if (b.Length > 0)
{
Memory Strea m stream = new Memory Strea m(b, true);
stream.Write(b, 0, b.Length);
pictur eBox1.Image= new Bitmap(stream);
stream.Close();
}
else
{
pictur eBox1.Refres h();
}
}
catch
{
}
finall y
{
cmd.Connec tion.Close();
conn.Close();
}
}
有了该方法后,我们需要在其他地方调用该方法。
需要调用的地方有:注意要加代码的地方已经加粗。
(1)
privat e void Form1_Load(object sender, EventA rgs e)
{
//为dataGridVi ew1绑定数据
DbOper ation dbopt= new DbOper ation();
string sql = "select * from 学生信息表";
DataTa ble db = dbopt.GetTab le(sql);
dataGr idVie w1.DataSo urce= db;
//当单击某一单元格时,选中该行
this.dataGr idVie w1.Select ionMo de = DataGr idVie wSele ction Mode.FullRo wSele ct;
mybind = this.Bindin gCont ext[db];
this.textBo x1.DataBi nding s.Add("text", db, "学号");
this.textBo x2.DataBi nding s.Add("text", db, "姓名");
this.textBo x3.DataBi nding s.Add("text", db, "系别");
this.textBo x4.DataBi nding s.Add("text", db, "借书证号");
//this.pictur eBox1.DataBi nding s.Add("text", db, "照片");
imagev iew();
}
(2)
privat e void button4_Cli ck(object sender, EventA rgs e)
{
pictur eBox1.Image= null;
if (mybind.Positi on == 0)
{
Messag eBox.Show("已经是第一条了!");
return;
}
else
{
mybind.Positi on = 0;
imagev iew();
}
}
privat e void button5_Cli ck(object sender, EventA rgs e) {
pictur eBox1.Image= null;
if (mybind.Positi on == (mybind.Count-1))
{
Messag eBox.Show("已经是最后一条了!");
return;
}
else
{
mybind.Positi on = mybind.Positi on+1;
imagev iew();
}
}
privat e void button6_Cli ck(object sender, EventA rgs e) {
pictur eBox1.Image= null;
if (mybind.Positi on == 0)
{
Messag eBox.Show("已经是第一条了!");
return;
}
else
{
mybind.Positi on = mybind.Positi on - 1;
imagev iew();
}
}
(3)
privat e void button1_Cli ck(object sender, EventA rgs e)
{
FormBa se fb = new FormBa se();
fb.ShowDi alog();
if (fb.ShowDi alog() == Dialog Resul t.Cancel)
{
//重新绑定数据
DbOper ation dbopt= new DbOper ation();
string sql = "select * from 学生信息表";
DataTa ble db = dbopt.GetTab le(sql);
dataGr idVie w1.DataSo urce= db;
//当单击某一单元格时,选中该行
this.dataGr idVie w1.Select ionMo de = DataGr idVie wSele ction Mode.FullRo wSele ct; mybind = this.Bindin gCont ext[db];
this.textBo x1.DataBi nding s.Clear();
this.textBo x2.DataBi nding s.Clear();
this.textBo x3.DataBi nding s.Clear();
this.textBo x4.DataBi nding s.Clear();
this.textBo x1.DataBi nding s.Add("text", db, "学号");
this.textBo x2.DataBi nding s.Add("text", db, "姓名");
this.textBo x3.DataBi nding s.Add("text", db, "系别");
this.textBo x4.DataBi nding s.Add("text", db, "借书证号");
imagev iew();
}
}
到目前为止,添加记录已经差不多了,如果还bug的话,希望同学们自己动手去修改。
接下来我们要做数据的编辑。
(9)当我们单击“编辑”按钮或或双击d ataG ridVi ew1的一行时,打开编辑记录窗口。
实现步骤如下:
首先,给项目添加一个窗体,窗体名称为“FormEd it”。
窗体中设计界面如下
为了能够传递参数,我们编写一个静态类in f o,向项目中添加一个类,类名是:info
为类info编写代码:代码如下:
其次、双击“编辑”按钮编写如下代码:
为了保存数据
先定义窗体变量用来保存图片:他们是:
然后编写一个函数用来显示图片
为“修改图片”标签编写打开图片代码:
10、删除记录请同学自己完成。