2024年6月21日发(作者:)
电脑编程技巧与维护
控件名 属性名 属性值 备注
ID stuUpd
Button2
T xt 更新
ID stuCancel
Button3
T xt 取消
ID stuNext
Button4
Text 下一条
3页面的实现
3.1访问数据库的connection对象的处理
在连接数据库时.需要创建一个connection对象来连接数
据库,为了优化代码,因此在web.config文件中设置了一个
connectionStrings节点,因为连接Access数据库需要考虑数据
库的所在的位置,因此在本节点中添加了“DBConnStr”,用
来存放连接字符串的前半部分, “DBConnStrPath”用来存放
数据库的相对位置。
<connectionStrings>
<add name=”DBConnStr”connectionSuing=”provider=
microsoft.jet.oledb.4.0:data source=”,>
<add name=”DBConnStrPath” connectionSuing=”~,
App
_
Data/studentMS.mdb”/>
</connectionSuings>
在页面的代码文件中.考虑到多处需要访问数据库,因
此设定了一个全局的connection对象conn,再在Page—Load 0
事件中对conn进行赋值。
在更新成绩时,因为要获取旧成绩,所以定义了一个静
态的全局变量oldScore,以此来保存旧成绩。
因为使用的是Access数据库,所以需要引入相应的命名
空间。
using System.Data.OleDb;
全局变量如下:
static sUing oldScore;
OleDbConnection conn=new OleDbConnection 0;
Page
Load 0事件中获取连接字符串代码如下:
conn.ConnectionString=System.Configuration.Configuration—
Manager.ConnectionSuings['|DBConnStr”】.ConnectionString;
conn.ConnectionSuing+=MapPath fSystem.Configuration.Con—
ifgurationManager.ConnectionSuings[”DBConnStrPath”】.Con—
nectionString);
3.2 Page
—
Load事件的实现
Page
_
oLad 0事件处理获取连接字符串外.还需要从学生
表中筛选出不同的系别,添加到系别列表,从课程表中筛选
出不同的课程名.添加到课程列表中。最后调用ShowStuList
方法。
访问数据库有两种方式.一种是离线连接方式,另一种
是在线连接方式,由于版面原因,只显示离线连接方式,代
码如下:
if(!IsPostBack)
{
oldScore=””:
_62 20疆1醺3 ̄建14羁与壤 ;
/璃线连接
OleDbDataAdapter da=new OleDbDataAdapter se-
lect distinct dep from students”,conn);
DataSet ds=new DataSet 0;
da.Fi11(ds,”xb”);
for(int i=0;i<ds.Tables【.'xb”】.Rows.Count;i++)
sdep.Items.Add(ds.Tables【I.xb”】.Rows【i] [0】.
ToString());
da.SelectCommand=new OleDbCornmand(”select
cname from courses”,conn);
da.Fi11(ds,”kc”);
for(int i=0;i<ds.Tables【¨kc”】.Rows.Count;i++)
course.Items.Add(ds.Tables【-t kc”】.Rows[i】
【0】.ToSuing());
}
3.3 自定义方法ShowStuList的实现
ShowStuList方法主要是显示当前系别的学生学号,并将
学号添加到学号列表中。代码如下:
public void ShowStuList(object sender,EventArgs e)/,显
,/示当前系部的学生的学号
{
sid.Items.Clear 0;
suing sqlStr=’’select sid from students where dep= +
sdep.SelectedValue+…’’:
OleDbDataAdapter da=new OleDbDataAdapter(sqlStr,
conn):,倩线连接
DataSet ds=new DataSet 0:
da.Fill(ds,”xh”);
for(int i=0;i<ds.Tables[”xh”】.Rows.Count;i++)
sid.Items.Add(ds.Tables【_.)【tl”】.Rows【i】 【0].
ToString 0);
stuPre.Visible=false;
ShowOtherlnfo(sender,e);刷用自定义方法显示学生
||成绩
}
3.4自定义方法ShowOtherlnfo的实现
本方法主要是显示当前学号当前课程的学生姓名和成绩,
代码如下:
public void ShowOtherlnfo(object sender,EventArgs e)
{
sUing sqlStr=”select from stuScore where sid=@sid
and cname=@cname”:
OleDbDataAdapter da=new OleDbDataAdapter(sqlStr,
conn);f,离线连接
da.S Add(”@sid”,OleDb—
Type.Char,10,”sid”);
da.SelectCommand.Parameters.Add C@cname”,OleDb-
Type.Char,20,”cname”);
[”@sid”].Value=sid.Se-
lectedValue;
【.’@cname”】.Value=
course.SelectedValue;
DataSet ds=new DataSet();
da.Fill(ds,”cx”);
if(ds.Tables【.’CX”】.Rows.Count>o)
NETW0RK AND C0MMUNICA ⅡON
{
sname.Text=ds.Tables[.|CX”】.Rows【0]
[2】
ToString 0;
score.Text=ds.Tables【”CX”】.Rows[0】
[3]
ToString();
oldScore=score.Text;
}
else
{
da.Selec Clear 0;
da.SelectCommand.CommandText=”select sid,name
from students Where sid=@sid”:
.
AddWithValue( ”
@sid”,sid.SelectedValue);
da.Fi11(ds,”st”);
sname.Text=ds.Tables[”st”].Rows【0] [1].ToString();
score.Text=… :
oldScore=…’:
)
,/判断上一条和下一条按钮是否显示
if(sid.SelectedIndex!=sid.Items.Count—1)
stuNext.Visible=true;
else
stuNext.Visible=false;
if(sid.Selectedlndex!=01
stuPre.Visible=true;
else
stuPre.Visible=false;
}
3.5更新功能的实现
本功能用在线连接方式更简单,代码如下:
string sqlStr=”select cid from courses where cname=
@cname”:
string newScore=score.Text;
conn.Open 0:,/在线连接
string cidz=…’;
OleDbCommand sqlCmd=new OleDbCommand(sqlStr,conn);
sqlCmd.Parameters.Add(”@cname”,OleDbType.Char,20,”
cname”);
sqlCmd.Paramete ̄[”@cname”】.Value=course.Select-
edValue;
OleDbDataReader dr=sqlCmd.ExecuteReader 0:
if(dr.Read())
cidz=dr[0].ToString 0.Trim 0;
rd.Close 0;
if(oldScore!=newScore&&oldScore==…’),,插入新成绩
{
sqlCmd.Parameters.Clear 0;
sqlCmd.CommandText=”insert into scores values( ’+
sid.SelectedValue+…, ’+cidz+…,”+newScore+”)”;
sqlCmd.ExecuteNonQuery 0;
)
if(oldScore!=newScore&&oldScore!=…’)/厦新成绩
{
sqlCmd.Paramete ̄.Clear();
网络与通信
sqlCmd.CommandText=。’update scores set score--”
+newScore+”where sid= ”+sid.SelectedValue+…and cid=
+cidz+…”:
sqlCmd.ExecuteNonQuery 0;
}
conn.Close 0;
3.6其他代码
当重新选择系别,需要调用ShowStuList(sender,e)方法重
新显示学生学号;当重新选择课程,需要调用ShowOtherlnfo
(sender,e)重新显示成绩;当重新选择学号,需要调用
ShowOtherlnfo(sender,e)重新显示学生姓名和成绩。
protected void stuPre
_
Click(object sender,EventArgs e)
,/上一条按钮的功能实现
{
int nowlndex=sid.SelectedIndex;
if(nowlndex=01
{
stuPre.Visible=false;
Response.End 0;
}
nowlndex=nowlndex—l:
sid.Selectedlndex=nowlndex;
ShowOtherlnfo(sender,e);
)
protected void stuNext
._
Click(object sender,EventArgs e)
,,下一条按钮的功能实现
{
int nowlndex=sid.Selectedlndex;
if(nowIndex==sid.Items.Count-1)
{
stuNext.Visible=false;
Response.End 0;
}
nowlndex=nowlndex+l:
sid.Selectedlndex=nowIndex;
ShowOtherI ̄o(sender,e);
}
4结语
在功能的实现过程中,书中是创建了返回专业和插入学
生成绩等存储过程来实现,而Access没有存储过程,因此在
设计时,将部分功能在代码中直接实现,并创建了一个名为
stuScore的查询.相应的SQL语句如下:
SELECT students.sid,courses.cname,students.name,scores.score
FR0M courses INNER J0IN f students NER J0IN scores
0N students.sid=scores.sid)ON courses.cid=scores.cid;
此查询被使用在ShowOtherlnfo方法中,根据此查询,可
以搜索到当前学生当前课程的成绩。
参考文献
【1】周苏峡,李建利.Web数据库应用实例教程.北京:清华
大学出版社,北京交通大学出版社,2008.
|
发布者:admin,转转请注明出处:http://www.yc00.com/web/1718924320a2753589.html
评论列表(0条)