如何将图片插入到数据库中
- 格式:pdf
- 大小:493.11 KB
- 文档页数:17
试验 十 数据库编程
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)为“确定”按钮的单击事件编写如下代码,保存数据到数据库。
private void button1_Click(object sender, EventArgs e) {
string xh = this.textBox1.Text.Trim();
string xm = this.textBox2.Text.Trim(); string xb = this.textBox3.Text.Trim();
string jszh = this.textBox4.Text.Trim();
DbOperation dbop = new DbOperation(); if (xh == "")
{
MessageBox.Show("学号不能为空!");
return; }
else
{
string sql = "insert into 学生信息表(学号,姓名,系别,借书证号) values('" + xh + "','" + xm + "','" + xb + "','" + jszh + "')";
dbop.sqlcmd(sql);
}
if (pictureName != "") {
DbConnection dbconn = new DbConnection();
SqlConnection sqlconnection1 = dbconn.getcon(); FileStream stream = new FileStream(pictureName, FileMode.Open,
FileAccess.Read);
buffer = new byte[stream.Length];
stream.Read(buffer, 0, (int)stream.Length);
stream.Close();
//
//图片写入数据库
string mySelectQuery = "UPDATE 学生信息表 set 照片=@imgdata where 学号='" + xh + "'";
SqlCommand myCommand = new SqlCommand(mySelectQuery, sqlconnection1);
SqlParameter paramData = new SqlParameter("@imgdata", SqlDbType.Image);
paramData.Value = buffer;
myCommand.Parameters.Add(paramData); myCommand.Connection.Open();
myCommand.ExecuteNonQuery(); }
}
*以下是新增的内容******************************************
为了防止用户连续单击“确定”按钮而引发异常,我们需要修改
上面的代码:修改的思路是一旦数据保存成功,就清空文本框的值。
具体代码如下:注意新增的代码已经加粗。
private void button1_Click(object sender, EventArgs e) {
string xh = this.textBox1.Text.Trim(); string xm = this.textBox2.Text.Trim();
string xb = this.textBox3.Text.Trim();
string jszh = this.textBox4.Text.Trim();
DbOperation dbop = new DbOperation(); if (xh == "") {
MessageBox.Show("学号不能为空!");
return; }
else {
try
{
string sql = "insert into 学生信息表(学号,姓名,系别,借书证号) values('" + xh + "','" + xm + "','" + xb + "','" + jszh + "')";
dbop.sqlcmd(sql); }
catch {
}
finally {
this.textBox1.Text = "";
this.textBox2.Text = "";
this.textBox3.Text = "";
this.textBox4.Text = ""; } }
if (pictureName != "") {
DbConnection dbconn = new DbConnection();
SqlConnection sqlconnection1 = dbconn.getcon(); FileStream stream = new FileStream(pictureName, FileMode.Open,
FileAccess.Read);
buffer = new byte[stream.Length];
stream.Read(buffer, 0, (int)stream.Length);
stream.Close(); //
//图片写入数据库
string mySelectQuery = "UPDATE 学生信息表 set 照片=@imgdata where 学号='" + xh + "'";
SqlCommand myCommand = new SqlCommand(mySelectQuery, sqlconnection1); SqlParameter paramData = new SqlParameter("@imgdata", SqlDbType.Image);
paramData.Value = buffer;
myCommand.Parameters.Add(paramData);
myCommand.Connection.Open();
myCommand.ExecuteNonQuery(); this.pictureBox1.Image = null; }
}
6、为“关闭”按钮编写如下代码,实现窗口关闭
private void button2_Click(object sender, EventArgs e) {
this.Close(); }
7、当用户添加完数据,关闭窗口。主窗口应该重新检索数据,把新增的
数据显示出来。为了实现该功能,我们返回到主窗口,找到打开FormBase窗口的代码:
即:
private void button1_Click(object sender, EventArgs e) {
FormBase fb = new FormBase();
fb.ShowDialog(); }
修改上面的代码: 修改后的代码:
FormBase fb = new FormBase();
fb.ShowDialog();
if (fb.ShowDialog() == DialogResult.Cancel) {
//重新绑定数据
DbOperation dbopt = new DbOperation();
string sql = "select * from 学生信息表";
DataTable db = 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, "系别");