2023年6月21日发(作者:)
试验 十 数据库编程
1、新建项目 项目名称为“dbgl”。
2、设计如下窗体:
窗体上放置的控件有:7个按钮,一个groupBox,4个label,4个textBox,1个pictureBox和1个dataGridView。
3、编写连接数据库的类
鼠标单击菜单栏上的“项目”选择“项目”菜单中的“添加类”命令,为“dbgl”项目添加连接数据库的类,类名是:DbConnection。如下图所示:
DbConnection类的代码如下图所示:注意需要引入ent名称空间。
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 = ();
string xm = ();
string xb = ();
string jszh = ();
DbOperation dbop = new DbOperation();
if (xh == "")
{
("学号不能为空!");
return;
}
else
{
string sql = "insert into 学生信息表(学号,姓名,系别,借书证号) values('" + xh +
"','" + xm + "','" + xb + "','" + jszh + "')";
(sql);
}
if (pictureName != "")
{ DbConnection dbconn = new DbConnection();
SqlConnection sqlconnection1 = ();
FileStream stream = new FileStream(pictureName, ,
);
buffer = new byte[];
(buffer, 0, (int));
();
//
//图片写入数据库
string mySelectQuery = "UPDATE 学生信息表 set 照片=@imgdata where 学号='" + xh
+ "'";
SqlCommand myCommand = new SqlCommand(mySelectQuery, sqlconnection1);
SqlParameter paramData = new SqlParameter("@imgdata", );
= buffer;
(paramData);
();
eNonQuery();
}
}
*以下是新增的内容******************************************
为了防止用户连续单击“确定”按钮而引发异常,我们需要修改上面的代码:修改的思路是一旦数据保存成功,就清空文本框的值。具体代码如下:注意新增的代码已经加粗。
private void button1_Click(object sender, EventArgs e)
{
string xh = ();
string xm = ();
string xb = ();
string jszh = ();
DbOperation dbop = new DbOperation();
if (xh == "")
{
("学号不能为空!");
return;
}
else
{
try
{
string sql = "insert into 学生信息表(学号,姓名,系别,借书证号) values('" +
xh + "','" + xm + "','" + xb + "','" + jszh + "')"; (sql);
}
catch
{
}
finally
{
= "";
= "";
= "";
= "";
}
}
if (pictureName != "")
{
DbConnection dbconn = new DbConnection();
SqlConnection sqlconnection1 = ();
FileStream stream = new FileStream(pictureName, ,
);
buffer = new byte[];
(buffer, 0, (int));
();
//
//图片写入数据库
string mySelectQuery = "UPDATE 学生信息表 set 照片=@imgdata where 学号='" + xh
+ "'";
SqlCommand myCommand = new SqlCommand(mySelectQuery, sqlconnection1);
SqlParameter paramData = new SqlParameter("@imgdata", );
= buffer;
(paramData);
();
eNonQuery();
= null;
}
}
6、为“关闭”按钮编写如下代码,实现窗口关闭
private void button2_Click(object sender, EventArgs e)
{
();
}
7、当用户添加完数据,关闭窗口。主窗口应该重新检索数据,把新增的数据显示出来。为了实现该功能,我们返回到主窗口,找到打开FormBase窗口的代码:
即: private void button1_Click(object sender, EventArgs e)
{
FormBase fb = new FormBase();
alog();
}
修改上面的代码: 修改后的代码:
FormBase fb = new FormBase();
alog();
if (alog() == )
{
//重新绑定数据
DbOperation dbopt = new DbOperation();
string sql = "select * from 学生信息表";
DataTable db = le(sql);
urce = db;
//当单击某一单元格时,选中该行
ionMode = wSelect;
mybind = gContext[db];
();
();
();
();
("text", db, "学号");
("text", db, "姓名");
("text", db, "系别");
("text", db, "借书证号");
//("text", db, "照片");
}
8、在主窗口中为了能够正确显示图片,我们需要增加一个imageview()方法来显示图片。该方法属于窗体。方法的代码如下:
private void imageview()
{
de = hImage;//图片显示模式
DbConnection connstr = new DbConnection();
SqlConnection conn = ();
();
SqlCommand cmd = new SqlCommand("select 照片 from 学生信息表 where 学号='" +
() + "'", conn);
try
{
byte[] b = (byte[])eScalar();
if ( > 0)
{ MemoryStream stream = new MemoryStream(b, true);
(b, 0, );
= new Bitmap(stream);
();
}
else
{
h();
}
}
catch
{
}
finally
{
();
();
}
}
有了该方法后,我们需要在其他地方调用该方法。需要调用的地方有: 注意要加代码的地方已经加粗。
(1)
private void Form1_Load(object sender, EventArgs e)
{
//为dataGridView1绑定数据
DbOperation dbopt = new DbOperation();
string sql = "select * from 学生信息表";
DataTable db = le(sql);
urce = db;
//当单击某一单元格时,选中该行
ionMode = wSelect;
mybind = gContext[db];
("text", db, "学号");
("text", db, "姓名");
("text", db, "系别");
("text", db, "借书证号");
//("text", db, "照片");
imageview();
}
(2)
private void button4_Click(object sender, EventArgs e)
{
= null; if (on == 0)
{
("已经是第一条了!");
return;
}
else
{
on = 0;
imageview();
}
}
private void button5_Click(object sender, EventArgs e)
{
= null;
if (on == (-1))
{
("已经是最后一条了!");
return;
}
else
{
on = on+1;
imageview();
}
}
private void button6_Click(object sender, EventArgs e)
{
= null;
if (on == 0)
{
("已经是第一条了!");
return;
}
else
{
on = on - 1;
imageview();
}
}
(3)
private void button1_Click(object sender, EventArgs e)
{
FormBase fb = new FormBase();
alog(); if (alog() == )
{
//重新绑定数据
DbOperation dbopt = new DbOperation();
string sql = "select * from 学生信息表";
DataTable db = le(sql);
urce = db;
//当单击某一单元格时,选中该行
ionMode = wSelect;
mybind = gContext[db];
();
();
();
();
("text", db, "学号");
("text", db, "姓名");
("text", db, "系别");
("text", db, "借书证号");
imageview();
}
}
到目前为止,添加记录已经差不多了,如果还bug的话,希望同学们自己动手去修改。接下来我们要做数据的编辑。
(9)当我们单击“编辑”按钮或或双击dataGridView1的一行时,打开编辑记录窗口。实现步骤如下:
首先,给项目添加一个窗体,窗体名称为“FormEdit”。窗体中设计界面如下
为了能够传递参数,我们编写一个静态类info,向项目中添加一个类,类名是:info
为类info编写代码:代码如下:
其次、双击“编辑”按钮编写如下代码:
接下来我们在编辑窗口的Load事件中编写如下代码:
private void FormEdit_Load(object sender, EventArgs e)
{
= ;
d = false;//学号不能修改
= ; = ;
= ;
d = false;//借书证号不能修改
= "";
= "";
= "";
= "";
//下面的代码获得图片
de = hImage;
DbConnection connstr = new DbConnection();
SqlConnection conn = ();
();
SqlCommand cmd = new SqlCommand("select 照片 from 学生信息表 where 学号='" +
() + "'", conn);
try
{
byte[] b = (byte[])eScalar();
if ( > 0)
{
MemoryStream stream = new MemoryStream(b, true);
(b, 0, );
= new Bitmap(stream);
();
}
else
{
h();
}
}
catch
{
////(ng());
//("该学生还没有附件扫描哦!!!");
}
finally
{
();
();
}
}
为了保存数据 先定义窗体变量用来保存图片:他们是:
然后编写一个函数用来显示图片
为“修改图片”标签编写打开图片代码:
最后,为编辑窗口的“确定”按钮编写代码保存数据
private void button1_Click(object sender, EventArgs e)
{
string sql = "update 学生信息表 set 姓名='" + + "',系别='" +
+ "' where 学号='" + () + "'";
DbOperation dbop = new DbOperation();
(sql);
if (pictureName != "")
{
DbConnection dbconn = new DbConnection();
SqlConnection sqlconnection1 = ();
FileStream stream = new FileStream(pictureName, , );
buffer = new byte[];
(buffer, 0, (int));
();
//
//图片写入数据库
string mySelectQuery = "UPDATE 学生信息表 set 照片=@imgdata where 学号='" +
() + "'";
SqlCommand myCommand = new SqlCommand(mySelectQuery, sqlconnection1);
SqlParameter paramData = new SqlParameter("@imgdata", );
= buffer;
(paramData);
();
eNonQuery();
= null;
}
("数据修改成功!");
}
10、删除记录请同学自己完成。
2023年6月21日发(作者:)
试验 十 数据库编程
1、新建项目 项目名称为“dbgl”。
2、设计如下窗体:
窗体上放置的控件有:7个按钮,一个groupBox,4个label,4个textBox,1个pictureBox和1个dataGridView。
3、编写连接数据库的类
鼠标单击菜单栏上的“项目”选择“项目”菜单中的“添加类”命令,为“dbgl”项目添加连接数据库的类,类名是:DbConnection。如下图所示:
DbConnection类的代码如下图所示:注意需要引入ent名称空间。
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 = ();
string xm = ();
string xb = ();
string jszh = ();
DbOperation dbop = new DbOperation();
if (xh == "")
{
("学号不能为空!");
return;
}
else
{
string sql = "insert into 学生信息表(学号,姓名,系别,借书证号) values('" + xh +
"','" + xm + "','" + xb + "','" + jszh + "')";
(sql);
}
if (pictureName != "")
{ DbConnection dbconn = new DbConnection();
SqlConnection sqlconnection1 = ();
FileStream stream = new FileStream(pictureName, ,
);
buffer = new byte[];
(buffer, 0, (int));
();
//
//图片写入数据库
string mySelectQuery = "UPDATE 学生信息表 set 照片=@imgdata where 学号='" + xh
+ "'";
SqlCommand myCommand = new SqlCommand(mySelectQuery, sqlconnection1);
SqlParameter paramData = new SqlParameter("@imgdata", );
= buffer;
(paramData);
();
eNonQuery();
}
}
*以下是新增的内容******************************************
为了防止用户连续单击“确定”按钮而引发异常,我们需要修改上面的代码:修改的思路是一旦数据保存成功,就清空文本框的值。具体代码如下:注意新增的代码已经加粗。
private void button1_Click(object sender, EventArgs e)
{
string xh = ();
string xm = ();
string xb = ();
string jszh = ();
DbOperation dbop = new DbOperation();
if (xh == "")
{
("学号不能为空!");
return;
}
else
{
try
{
string sql = "insert into 学生信息表(学号,姓名,系别,借书证号) values('" +
xh + "','" + xm + "','" + xb + "','" + jszh + "')"; (sql);
}
catch
{
}
finally
{
= "";
= "";
= "";
= "";
}
}
if (pictureName != "")
{
DbConnection dbconn = new DbConnection();
SqlConnection sqlconnection1 = ();
FileStream stream = new FileStream(pictureName, ,
);
buffer = new byte[];
(buffer, 0, (int));
();
//
//图片写入数据库
string mySelectQuery = "UPDATE 学生信息表 set 照片=@imgdata where 学号='" + xh
+ "'";
SqlCommand myCommand = new SqlCommand(mySelectQuery, sqlconnection1);
SqlParameter paramData = new SqlParameter("@imgdata", );
= buffer;
(paramData);
();
eNonQuery();
= null;
}
}
6、为“关闭”按钮编写如下代码,实现窗口关闭
private void button2_Click(object sender, EventArgs e)
{
();
}
7、当用户添加完数据,关闭窗口。主窗口应该重新检索数据,把新增的数据显示出来。为了实现该功能,我们返回到主窗口,找到打开FormBase窗口的代码:
即: private void button1_Click(object sender, EventArgs e)
{
FormBase fb = new FormBase();
alog();
}
修改上面的代码: 修改后的代码:
FormBase fb = new FormBase();
alog();
if (alog() == )
{
//重新绑定数据
DbOperation dbopt = new DbOperation();
string sql = "select * from 学生信息表";
DataTable db = le(sql);
urce = db;
//当单击某一单元格时,选中该行
ionMode = wSelect;
mybind = gContext[db];
();
();
();
();
("text", db, "学号");
("text", db, "姓名");
("text", db, "系别");
("text", db, "借书证号");
//("text", db, "照片");
}
8、在主窗口中为了能够正确显示图片,我们需要增加一个imageview()方法来显示图片。该方法属于窗体。方法的代码如下:
private void imageview()
{
de = hImage;//图片显示模式
DbConnection connstr = new DbConnection();
SqlConnection conn = ();
();
SqlCommand cmd = new SqlCommand("select 照片 from 学生信息表 where 学号='" +
() + "'", conn);
try
{
byte[] b = (byte[])eScalar();
if ( > 0)
{ MemoryStream stream = new MemoryStream(b, true);
(b, 0, );
= new Bitmap(stream);
();
}
else
{
h();
}
}
catch
{
}
finally
{
();
();
}
}
有了该方法后,我们需要在其他地方调用该方法。需要调用的地方有: 注意要加代码的地方已经加粗。
(1)
private void Form1_Load(object sender, EventArgs e)
{
//为dataGridView1绑定数据
DbOperation dbopt = new DbOperation();
string sql = "select * from 学生信息表";
DataTable db = le(sql);
urce = db;
//当单击某一单元格时,选中该行
ionMode = wSelect;
mybind = gContext[db];
("text", db, "学号");
("text", db, "姓名");
("text", db, "系别");
("text", db, "借书证号");
//("text", db, "照片");
imageview();
}
(2)
private void button4_Click(object sender, EventArgs e)
{
= null; if (on == 0)
{
("已经是第一条了!");
return;
}
else
{
on = 0;
imageview();
}
}
private void button5_Click(object sender, EventArgs e)
{
= null;
if (on == (-1))
{
("已经是最后一条了!");
return;
}
else
{
on = on+1;
imageview();
}
}
private void button6_Click(object sender, EventArgs e)
{
= null;
if (on == 0)
{
("已经是第一条了!");
return;
}
else
{
on = on - 1;
imageview();
}
}
(3)
private void button1_Click(object sender, EventArgs e)
{
FormBase fb = new FormBase();
alog(); if (alog() == )
{
//重新绑定数据
DbOperation dbopt = new DbOperation();
string sql = "select * from 学生信息表";
DataTable db = le(sql);
urce = db;
//当单击某一单元格时,选中该行
ionMode = wSelect;
mybind = gContext[db];
();
();
();
();
("text", db, "学号");
("text", db, "姓名");
("text", db, "系别");
("text", db, "借书证号");
imageview();
}
}
到目前为止,添加记录已经差不多了,如果还bug的话,希望同学们自己动手去修改。接下来我们要做数据的编辑。
(9)当我们单击“编辑”按钮或或双击dataGridView1的一行时,打开编辑记录窗口。实现步骤如下:
首先,给项目添加一个窗体,窗体名称为“FormEdit”。窗体中设计界面如下
为了能够传递参数,我们编写一个静态类info,向项目中添加一个类,类名是:info
为类info编写代码:代码如下:
其次、双击“编辑”按钮编写如下代码:
接下来我们在编辑窗口的Load事件中编写如下代码:
private void FormEdit_Load(object sender, EventArgs e)
{
= ;
d = false;//学号不能修改
= ; = ;
= ;
d = false;//借书证号不能修改
= "";
= "";
= "";
= "";
//下面的代码获得图片
de = hImage;
DbConnection connstr = new DbConnection();
SqlConnection conn = ();
();
SqlCommand cmd = new SqlCommand("select 照片 from 学生信息表 where 学号='" +
() + "'", conn);
try
{
byte[] b = (byte[])eScalar();
if ( > 0)
{
MemoryStream stream = new MemoryStream(b, true);
(b, 0, );
= new Bitmap(stream);
();
}
else
{
h();
}
}
catch
{
////(ng());
//("该学生还没有附件扫描哦!!!");
}
finally
{
();
();
}
}
为了保存数据 先定义窗体变量用来保存图片:他们是:
然后编写一个函数用来显示图片
为“修改图片”标签编写打开图片代码:
最后,为编辑窗口的“确定”按钮编写代码保存数据
private void button1_Click(object sender, EventArgs e)
{
string sql = "update 学生信息表 set 姓名='" + + "',系别='" +
+ "' where 学号='" + () + "'";
DbOperation dbop = new DbOperation();
(sql);
if (pictureName != "")
{
DbConnection dbconn = new DbConnection();
SqlConnection sqlconnection1 = ();
FileStream stream = new FileStream(pictureName, , );
buffer = new byte[];
(buffer, 0, (int));
();
//
//图片写入数据库
string mySelectQuery = "UPDATE 学生信息表 set 照片=@imgdata where 学号='" +
() + "'";
SqlCommand myCommand = new SqlCommand(mySelectQuery, sqlconnection1);
SqlParameter paramData = new SqlParameter("@imgdata", );
= buffer;
(paramData);
();
eNonQuery();
= null;
}
("数据修改成功!");
}
10、删除记录请同学自己完成。
发布评论