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、删除记录请同学自己完成。