ASP.NET数据存储与交换系统设计

摘 要

该系统以Microsoft Visual Studio 2003作为开发工具,选用SQL Server 2000数据库来实现数据存储,并设计开发了一种基于B/S模式的数据存储与交换系统。该系统完成了用户注册管理、后台管理和用户空间管理功能;为每个用户提供了个人的存储空间;用户可以通过浏览器实现文件的上传、下载和资源的共享;根据用户空间等级限制用户存储空间的大小;为用户共享文件提供积分制;通过积分制来对用户空间升级实行优惠。最后通过测试,基本满足了用户的需求,但还需要进一步完善,才可以应用于实际中。

关键词 **:**网络存储;上传下载;资源共享

2****系统需求分析

该系统功能要求如下:

(1) 用户管理:用户注册、注册审核、用户存储空间限定管理、用户积分、用户等级

(2) 存储管理:为用户提供基于B/S模式的上传和下载数据,数据为现有的个人用户文件,为用户提供存储文件的添加、修改、删除操作。

(3) 收费管理:按照空间大小收费、根据用户的积分、等级实施优惠收费,为用户提供共享的文件提供积分累计。

(4) 数据共享管理:数据共享文件管理。

5****系统模块 代码实现

根据系统功能设计,将整个系统划分为以下几个功能模块。

5.1****用户登录模块

用户登录界面(Default.aspx)是起始界面,必须登录后才可以进行其他的操作。首先通过输入用户名和密码,然后在用户信息表Users中查询输入的用户名和密码两个字段是否有相匹配的数组,如果没有则提示"用户不存在或密码错误!",返回登录界面;如果登录成功则将用户名赋给Session,然后自动跳转到用户主界面。其中登录Button的触发主要代码如下:

conn.ConnectionString = "Data Source=86BC14A814F7477;Initial Catalog=NWMS;User ID=sa;Password=123"

conn.Open()

cmd.Connection = conn '连接数据库

cmd.CommandText = "Select * From Users"

objReader = cmd.ExecuteReader()

Do While objReader.Read()

If UserId.Text = objReader.Item("UserId") And UserPwd.Text = objReader.Item("UserPwd") Then

'在数据库Users表中搜寻与输入的用户名和密码相匹配的数组

Session("UserId") = UserId.Text'将用户名赋给Session

Response.Redirect("User0.aspx") '登录成功跳转页面

Exit Do

End If

Loop

Response.Write("<script>alert('用户不存在或密码错误!')</script>")

objReader.Close()

conn.Close()'断开数据库连接

5.2****用户注册模块

用户注册页面(Reg.aspx),文本框后带**的为必填,其他选填,用户注册时必须输入用户名、密码、密码确认、密码提示问题、密码提示答案和电子邮箱,否则不能注册。当这些都满足后点击注册,触发事件代码开始搜索用户信息表(Users),检验是否存在相同用户名,如存在,那么提示"该用户已经注册!",退回注册页面,主要代码如下:

cmd.CommandText = "Select UserId From Users"

objReader = cmd.ExecuteReader()

Do While objReader.Read()

If UserIdBox.Text = objReader.Item("UserId") Then

Response.Write("<script>alert('该用户已经注册!')</script>") '验证用户名

i = 1

Exit Do

End If

Loop

objReader.Close()

如果未发现相同用户名,则用SQL语句INSERT将新用户信息写入用户信息表Users,同时运用MkDir( )在服务器系统目录的myfile文件夹内新建一个文件夹,用户名即为文件夹名。同时将用户等级类型设定为"1",即普通用户,享有空间大小为50MB;将用户锁定类型设为空,即默认未锁;将用户积分等级设为0,刚注册用户对未共享过任何文件,未为资源共享做贡献,所以不具有收费优惠。主要代码如下:

cmd.CommandText = "INSERT INTO Users(UserId,UserPwd,PwdQuestion,PwdAnwser,Email,Ser,QQ,UserName,Telephone,vUserRank,vRegDate,vUserLock,vContrbRank,UserIn,vUserSore) VALUES('" & UserIdBox.Text & "','" & UserPwdBox.Text & "','" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & ser & "','" & TextBox4.Text & "','" & TextBox5.Text & "','" & TextBox6.Text & "' ,'" & 1 & "','" & Today & "' ,'" & "" & "','" & "" & "','" & "" & "','" & "" & "')"

If cmd.ExecuteNonQuery > 0 Then

Dim filepath As String = Path.Combine(Server.MapPath(".") & "\myfile", UserIdBox.Text)

MkDir(filepath) '新建个人文件夹,文件名为用户名

Response.Write("<script language=javascript>alert('注册成功!');window.location='Default.aspx';</script>")

End If

5.3****用户主界面模块

用户主界面(User0.aspx)采用分页技术显示,主要有上和左、右3部分。左边固定显示LeftTree.aspx页面,主要给用户提供操作链接,通过点击左边的链接(包括有:文件管理、文件上传、我的共享、公共共享、空间升级、空间信息、个人资料和退出系统),将相应的操作页面在右边显示出来,右边的初始页面为用户个人空间信息页面(Spatial_inon.aspx),具体界面如图2。

图2 用户主界面操作图

5.4****文件存储管理模块

在主界面左边的链接中点击"文件管理"连接到文件管理页面(File_mgt.aspx),该页面利用DataGrid的强大显示功能为用户显示了当前用户所上传的所有文件,并可以对任何一个文件通过"编辑"超链接到编辑页面(File_edit.aspx)进行共享和文件名的修改;还可以通过点击文件名下载当前文件,还可以通过点击删除,删除相应行文件信息和文件(删除文件运用的是Kill( ))。主要代码如下:

(1) 初始化页面和声明绑定数据过程Bind()主要代码如下:

If Not (Me.IsPostBack) Then

Me.Bind()

End If

Sub Bind()

Dim userid As String = Session("UserId")

Sql = "Select * From UserFiles WHERE UserId='" & userid & "'"

cnSqlServer = "Data Source=86BC14A814F7477;Initial Catalog=NWMS;User ID=sa;Password=123"

Dim objAdapter As New SqlDataAdapter(Sql, cnSqlServer)

objAdapter.Fill(ds, "UserFiles")

DataGrid.DataSource = ds

DataGrid.DataBind()

conn.Close()

conn.Dispose()

End Sub

(2) 点击文件名触发下载文件事件的主要代码如下:

Dim fileW As String = e.Item.Cells(0).Text

Dim filepath As String = Server.MapPath(fileW)

Dim filename As String = System.IO.Path.GetFileName(filepath)

Response.Clear()

Response.ContentType = "application/octet-stream"

Response.AppendHeader("Content-Disposition", "attachment;filename=" + filename)

Response.Flush()

Response.WriteFile(filepath)

(3) 点击删除时,删除当前行文件和文件信息,主要代码如下:

Dim Sql As String = "Delete UserFiles WHERE vWay=@vWay"

Dim cmd As New SqlCommand(Sql, conn)

cmd.Parameters.Add(New SqlParameter("@vWay", SqlDbType.VarChar, 50))

cmd.Parameters("@vWay").Value = e.Item.Cells(0).Text

conn.Open()

cmd.ExecuteNonQuery()

Dim pathname As String = Path.Combine(Server.MapPath("."), e.Item.Cells(0).Text)

Kill(pathname)

conn.Close()

cmd.Dispose()

conn.Dispose()

Me.Bind()

(4) 点击datagrid控件中的超链接列"编辑",连接到相应文件编辑页面(File_edit.aspx=?file={0}),通过file将相应行的文件路径值传给文件编辑页面,文件编辑主要代码如下:

  1. 初始化页的代码如下:

Way = Request.QueryString("file") '获取传值

If Not (Me.IsPostBack) Then

FileName.Text = Path.GetFileNameWithoutExtension(Way) '从路径中获取不含扩展名的用户名

End If

  1. 修改Button触发的事件主要代码如下:

Dim FileNameW As String = FileName.Text '获取TextBox的控件中的用户名

Dim FileNameE As String = Path.GetExtension(Way)'从路径中提取文件扩展名

Dim FileNameA As String = FileNameW & FileNameE '合并两字符串

Dim FilenewWay As String = Path.Combine(Path.GetDirectoryName(Way), FileNameA) '合并两路径字符串,合并成新路径

Dim pathnameO As String = Path.Combine(Server.MapPath("."), Way)

Dim pathnameN As String = Path.Combine(Server.MapPath("."), FilenewWay)

'更新数据库数据表中的文件信息

cmd.CommandText = "UPDATE UserFiles SET vWay='" & FilenewWay & "', vUpDate='" & Now & "',vFileName='" & FileNameA & "',vSharType='" & type & "' WHERE vWay='" & Way & "'"

n = cmd.ExecuteNonQuery()

Rename(pathnameO, pathnameN)'修改相对应的文件的文件名

5.5****文件上传模块

在主界面左边的链接中或文件管理页面的右上角点击"文件上传"就链接到文件上传页面(upload.aspx),该页面用File Field控件完成文件上传,通过上传代码"FileUpload.PostedFile.SaveAs( )"将文件上传保存到用户个人文件夹下面,并将文件信息写如数据库UserFiles表。上传之前判定控件内是否存在上传文件地址,如果没有则提示"未发现文件。",如果有则继续下步,搜索用户已经上传文件的总大小,加上当前将要上传的文件大小之和,判断其是否超过用户等级限定的空间大小,如果超过,则弹出对话框"你的空间不足!";如果未超过,表示还可以上传,再检测上传空间内是否存在相同文件名(包括扩展名),如果有则将文件覆盖,修改文件保存相关信息提示"XX文件被覆盖",如果没有则提示"XX文件成功上传到服务器",保存文件相关信息和文件。主要代码如下:

Dim userid As String = Session("UserId")

FileNname = Path.GetFileName(FileUpload.Value) '提取控件路径中的文件名

FileUname1 = Path.Combine("myfile", userid)

FileUname = Path.Combine(Server.MapPath("."), FileUname1) '获得了文件上传目录

FileNewW = Path.Combine(FileUname1, FileNname)

Filepath = Path.Combine(FileUname, FileNname)

FileNewl = FileUpload.PostedFile.ContentLength

FileNewlB = ConvertBytes(FileNewl)

(1) 统计已用空间大小主要代码如下:

cmd.CommandText = "Select UserId From UserFiles"

objReader = cmd.ExecuteReader()

Do While objReader.Read()

If userid = objReader.Item("UserId") Then

objReader.Close()

cmd.CommandText = "Select SUM(vFileSb) From UserFiles WHERE UserId='" & userid & "'"

objReader = cmd.ExecuteReader()

objReader.Read()

FileOldl = objReader.Item(0) '统计用户空间文件大小

Exit Do

End If

Loop

(2) 获得用户空间大小主要代码如下:

cmd.CommandText = "SELECT vUserRank From Users WHERE UserId= '" & userid & "'"

objReader = cmd.ExecuteReader

objReader.Read()

UserRank = objReader.Item(0) '获得用户等级

objReader.Close()

cmd.CommandText = "SELECT vSpaceSb From UsersRank WHERE vIserRank='" & UserRank & "'"

objReader = cmd.ExecuteReader

objReader.Read()

SpaceSb = objReader.Item(0) '获得用户相应等级空间

objReader.Close()

If FileSuml < SpaceSb Then

cmd.CommandText = "SELECT vWay FROM UserFiles"

objReader = cmd.ExecuteReader()

Do While objReader.Read()

If FileNewW = objReader.Item("vWay") Then

I = 1 '搜寻用户空间中是否存在相同文件名

Exit Do

End If

Loop

(3) 如空间内没有相同文件,则主要代码如下:

cmd.CommandText = "INSERT INTO UserFiles(UserId,vFileSize,vFileSb,vFileName,vWay,vSharType,vUpDate,vDownCount,vFileLock,vFileUp) VALUES('" & userid & "','" & FileNewlB & "','" & FileNewl & "','" & FileNname & "','" & FileNewW & "','" & "不共享" & "','" & Now & "','" & "" & "','" & "" & "','" & "" & "')"

n = cmd.ExecuteNonQuery

FileUpload.PostedFile.SaveAs(Filepath) '上传文件到指定目录

lblMessage.InnerHtml = "文件 <b>" & FileNname & "</b>成功上传到服务器,大小为" & FileNewlB

(4) 如空间有相同文件,则主要代码如下:

cmd.CommandText = "UPDATE UserFiles SET vFileSize='" & FileNewlB & "',vFileSb='" & FileNewl & "',vUpDate='" & Now & "',vDownCount='" & "" & "',vFileLock='" & "" & "',vFileUp='" & "" & "' WHERE vWay='" & FileNewW & "'"

n = cmd.ExecuteNonQuery

FileUpload.PostedFile.SaveAs(Filepath) '上传文件到指定目录

lblMessage.InnerHtml = "文件 <b>" & FileNname & "</b>被覆盖,大小为" & FileNewlB

(5) 自定义一个换算字符长度的Function代码如下:

Public Function ConvertBytes(ByVal Bytes As Long) As String

' 将过大字符长度由Byte转化为GB、MB、KB表示

If Bytes >= 1073741824 Then

Return Format(Bytes / 1024 / 1024 / 1024, "#0.00") & " GB"

ElseIf Bytes >= 1048576 Then

Return Format(Bytes / 1024 / 1024, "#0.00") & " MB"

ElseIf Bytes >= 1024 Then

Return Format(Bytes / 1024, "#0.00") & " KB"

ElseIf Bytes > 0 And Bytes < 1024 Then

Return Fix(Bytes) & " Bytes"

Else

Return "0 Bytes"

End If

End Function

5.6****我的共享查询模块

在主界面左边的链接中点击"我的共享"就链接到我的共享查询页面(Myshar.aspx),该模块也采用DateGrid控件显示个人已经共享的文件的信息,你可以从中看到你所共享的文件被下载次数,是否被管理员锁定,还可点击相应行后边的取消直接取消共享。如果锁定栏下有"√"符号,那么证明你所共享的文件被别人举报,经过管理员核查属于不合适文件,它将不会再被显示到共享区域。主要代码如下:

(1) 绑定数据库主要代码:

Sql = "Select * From UserFiles WHERE UserId='" & userid & "' AND vSharType='" & "共享" & "' ORDER BY vDownCount DESC"

cnSqlServer = "Data Source=86BC14A814F7477;Initial Catalog=NWMS;User ID=sa;Password=123"

Dim objAdapter As New SqlDataAdapter(Sql, cnSqlServer)

objAdapter.Fill(ds, "UserFiles")

DataGrid.DataSource = ds

DataGrid.DataBind()

(2) 取消Button触发事件主要代码:

Dim cmd As New SqlCommand(Sql, conn)

cmd.Parameters.Add(New SqlParameter("@vWay", SqlDbType.VarChar, 50))

cmd.Parameters("@vWay").Value = e.Item.Cells(0).Text

5.7****公共共享查询模块

在主界面左边的链接中点击"公共共享"就链接到公共共享查询页面(Publicshar.aspx),该页面也采用DateGrid控件显示所有人共享的文件的信息,用户可以从表中看到文件名、提供用户、文件大小、更新时间、下载统计,默认是按下载统计次数排列。用户可以点击文件名下载共享文件,如发现共享文件内容属于违法、黄色、反动等不合适信息时可以点击举报举报该文件,以便管理员好根据举报来查看、锁定不合理文件。当用户下载了共享区域的文件后,那么该文件的下载统计次数和提供该文件的用户的积分将自动加1。主要代码如下:

(1) 下载事件的主要代码:

Response.Clear()

Response.ContentType = "application/octet-stream"

Response.AppendHeader("Content-Disposition", "attachment;filename=" + filename)

Response.Flush()

Response.WriteFile(filepath)

(2) 点击文件下载后,文件下载统计和用户积分自动加1,主要代码:

cmd.CommandText = "Select vDownCount,UserId From UserFiles where vWay='" & fileW & "'"

objReader = cmd.ExecuteReader()

objReader.Read()

Dim downcount As Integer = objReader.Item(0)

Dim id As String = objReader.Item(1)

objReader.Close()

cmd.CommandText = "Select vUserSore From Users where UserId='" & id & "'"

objReader = cmd.ExecuteReader

objReader.Read()

Dim usersore As Integer = objReader.Item(0)

objReader.Close()

downcount += 1

usersore += 1

cmd.CommandText = "Update Users set vUserSore='" & usersore & "' where UserId='" & id & "'"

cmd.ExecuteNonQuery()

cmd.CommandText = "Update UserFiles set vDownCount='" & downcount & "' where vWay='" & fileW & "'"

cmd.ExecuteNonQuery()

(3) 点击"举报"触发事件主要代码:

Dim Sql As String = "UPDATE UserFiles SET vFileUp=vFileUp+1 WHERE vWay=@vWay"

Dim cmd As New SqlCommand(Sql, conn)

cmd.Parameters.Add(New SqlParameter("@vWay", SqlDbType.VarChar, 50))

cmd.Parameters("@vWay").Value = e.Item.Cells(0).Text

5.8****用户资料修改模块

在主界面左边的链接中点击"个人资料"就连接到用户资料修改页面(MayRegedit.aspx),该页面主要是用户进行自己除用户名和性别以外的其他信息的修改,包括密码和密码保护材料的修改。在修改密码和密码保护材料时需要旧密码和保护材料,不过就密码和保护资料不符合,那么将不能进行修改。初始化页的主要代码如下:

cmd.CommandText = "Select * From Users where UserId='" & userid & "'"

objReader = cmd.ExecuteReader

objReader.Read()

email.Value = objReader.Item(4)

Label3.Text = objReader.Item(5)

qq.Value = objReader.Item(6)

realname.Value = objReader.Item(7)

phone.Value = objReader.Item(8)

recommend.Value = objReader.Item(9)

5.9****空间升级查询模块

空间升级查询模块Upgrade.aspx,运用两个Datagrid控件将现有用户空间等级和积分等级的相关信息展示给用户,如用户等级划分,相应空间大小、费用,相应积分等级条件、优惠打折。选择想申请用户空间等级,还会查询到实际应该支付费用。其中还用到了DropDownList控件,用于用户现在用户等级。另外在此模块中用到Datagrid控件要注意的是数据绑定的时候注意定义2个不同的DataSet,主要代码如下:

Dim objAdapter As New SqlDataAdapter(Sql, cnSqlServer)

objAdapter.Fill(ds, "IntegralRank")

DataGrid.DataSource = ds

DataGrid.DataBind()

Dim objAdapter1 As New SqlDataAdapter(Sql, cnSqlServer)

objAdapter1.Fill(ds1, "UsersRank")

Datagrid1.DataSource = ds1

Datagrid1.DataBind()

具体页面显示如图3。

图3 空间升级信息查询页面

5.10****后台管理登录模块

由于该系统采用用户和管理员分开登录,管理员所有操作界面模块全包含在系统目录的Admin文件夹下。管理员要进行后台管理必须通过此模块(Admin/Default.aspx)登录到后台管理主界面,在管理员输入ID和密码后,和普通用户登录模块一样查询数据库表Admin表,验证是否存在与之相匹配的ID和密码数组,如果存在则登录成功,将管理员ID值赋给Session,页面跳转到后台管理主界面。

5.11****后台管理主界面模块

通过后台管理登录模块登录到后台管理主界面(Admin/Admin0.aspx),该界面同用户主界面模块类似,作为后台管理的枢纽,也是通过分页技术显示,通过左边的一系列超链接按钮来链接到各个管理界面,在右边分页中显示出来。具体页面如图4。

主界面图

5.12****用户管理模块

管理员通过管理员登录验证后登录到后台管理主界面模块,通过左边的链接在右边分页中显示出来,管理员通过"添加用户"可以对用户进行添加,代码实现类似用户注册模块,只不过没那么详细,在这里只添加了用户信息的用户名、密码、用户等级、锁定状态,其他详细信息需要登录该用户后在个人资料里边完善;通过"管理用户"可以查看所有用户,在通过相应行"编辑"超链接连接到各个用户编辑页面(Admin/Admin_user_edit?username={0}),在此页面管理员可以对用户进行密码、用户等级、锁定状态的修改,可以删除用户,删除用户时候还要用rmdir()删除用户空间文件夹,主要代码如下:

Dim user As String = Request.QueryString("username") '接收传值

cmd.CommandText = "Delete Users WHERE UserId='" & Label1.Text & "'

通过"添加等级"添加用户等级,通过"管理等级"查询所有用户等级,可点击删除删除相应用户等级,还可以通过修改超链接进入等级修改页面(Admin/admin_rank_edit?id={0}),用户等级设定里边包含了相应用户等级空间大小。其中删除代码类似于文件删除代码,修改代码类型于文件编辑代码。

5.13****管理员管理模块

管理员可以通过该模块的"添加管理员"功能添加新的管理员,权限都相同,添加内容有:管理员帐号、密码、信息联系方式,实现代码类似于用户注册。管理管理员,可以查看所有管理员,可以修改管理员密码、信息联系方式和删除管理员。主要代码如下:

Dim user As String = Request.QueryString("username")

Label1.Text = user

cmd.CommandText = "Select vAdminConn From admin where vAdminId='" & user & "'"

objReader = cmd.ExecuteReader

objReader.Read()

adminconn.Text = objReader.Item(0) '根据传值查询显示相应信息

5.14****共享管理模块

(1) 共享文件页面(Admin/Admin_share_file.aspx)通过DataGrid控件显示出所有的所用户共享的非锁定文件,类似于用户公共共享页面(Publicshar.aspx),包括文件名、大小、提供用户、更新时间、下载统计,管理员可以查看、下载任何共享文件;还可以对共享文件进行锁定,被锁定后的文件将不会在共享区域显示出来,主要代码如下:

Dim Sql As String = "UPDATE UserFiles SET vFileLock='√' WHERE vWay=@vWay"

Dim cmd As New SqlCommand(Sql, conn)

cmd.Parameters.Add(New SqlParameter("@vWay", SqlDbType.VarChar, 50))

cmd.Parameters("@vWay").Value = e.Item.Cells(0).Text

(2) 管理员从"举报查看"中查看被用户举报的文件,从中可以看到文件被举报次数统计,并按被举报次数排列,通过查看文件验证共享文件是否不合适,对不合适文件进行锁定。主要代码如下:

Sql = "Select * From UserFiles WHERE vSharType='共享' AND vFileLock='' AND vFileUp>'0' ORDER BY vFileUp DESC"

Dim objAdapter As New SqlDataAdapter(Sql, cnSqlServer)

objAdapter.Fill(ds, "UserFiles")

DataGrid.DataSource = ds

DataGrid.DataBind()

(3) 管理员还可以从"被锁定文件"链接到被锁定文件查看页面,对错判而锁定的文件进行解锁。主要代码如下:

Dim Sql As String = "UPDATE UserFiles SET vFileLock='' WHERE vWay=@vWay"

Dim cmd As New SqlCommand(Sql, conn)

cmd.Parameters.Add(New SqlParameter("@vWay", SqlDbType.VarChar, 50))

cmd.Parameters("@vWay").Value = e.Item.Cells(0).Text

5.15****收费管理模块

管理员可以添加、删除、修改用户积分等级,按照空间大小收费、根据用户的积分级别实施优惠收费。当某用户申请升级时候,可以查询该用户的积分、积分等级,以及升级到相应等级经过优惠折算后应支付的实际费用。

(1) 添加积分等级SQL语句如下:

cmd.CommandText = "INSERT INTO IntegralRank(vIntegralRank,vUserSoreU,vUserSoreD,vContrbRed) VALUES('" & Textbox1.Text & "','" & Textbox2.Text & "','" & Textbox3.Text & "','" & Textbox4.Text & "')"

(2) 查看积分等级页面(Admin/Admin_sore.aspx)用DataGrid显示,主要代码如下:

Sql = "Select * From IntegralRank ORDER BY vIntegralRank"

Dim objAdapter As New SqlDataAdapter(Sql, cnSqlServer)

objAdapter.Fill(ds, "IntegralRank")

DataGrid.DataSource = ds

DataGrid.DataBind()

(3) 通过查看积分等级页面DataGrid显示中各行的修改超链接链接到积分等级修改页面(Admin/Admin_sore_edit.aspx),此页面主要代码如下:

Dim id As String = Request.QueryString("id") '获得传值

cmd.CommandText = "Select * From IntegralRank where vIntegralRank='" & id & "'"

objReader = cmd.ExecuteReader

objReader.Read()

Textbox1.Text = objReader.Item(1)

Textbox2.Text = objReader.Item(2)

Textbox3.Text = objReader.Item(3) '初始化页面

(4) 收费查询页面(Admin/Admin_money.aspx),实现查询某特定用户升级到特定用户等级所需要的实际费用,还显示出了该用户的积分、优惠打折,查询Button触发的主要代码如下:

Dim userrank As Integer = DropDownList1.SelectedValue.Trim()

'查询该用户积分

cmd.CommandText = "Select vUserSore From Users where UserId='" & Textbox1.Text & "'"

objReader = cmd.ExecuteReader

objReader.Read()

Label1.Text = objReader.Item("vUserSore")

objReader.Close()

'根据积分查询出该用户所处积分等级的优惠打折

cmd.CommandText = "Select * From IntegralRank "

objReader = cmd.ExecuteReader

Do While objReader.Read()

If Label1.Text > objReader.Item("vUserSoreU") And Label1.Text < objReader.Item("vUserSoreD") Then

contrbred = objReader.Item("vContrbRed")

Label2.Text = objReader.Item("vContrbRed")

i = 1

Exit Do

End If

Loop

'查询想要获得用户等级的原价

cmd.CommandText = "Select vCharge From UsersRank where vUserRank='" & userrank & "'"

objReader = cmd.ExecuteReader

objReader.Read()

Dim charger As String = objReader.Item(0)

objReader.Close()

Label3.Text = charger

Label4.Text = charger * contrbred / 10 '计算出需要升级所支付的实际费用

相关推荐
疯一样的码农9 分钟前
基于Spring Boot + Vue3实现的在线商品竞拍管理系统源码+文档
java·spring boot·后端
Y编程小白1 小时前
SpringBoot的pom.xml文件中,scope标签有几种配置?
xml·spring boot·后端
健康平安的活着2 小时前
springboot整合log4j2日志框架1
spring boot·后端·log4j
是一只派大鑫2 小时前
从头开始学MyBatis—04缓存、逆向工程、分页插件
java·后端·mybatis
GoGeekBaird3 小时前
69天探索操作系统-第25天:文件系统基础
后端·操作系统
技术小泽3 小时前
代码思想之快慢路径
java·开发语言·spring boot·后端·设计规范
*长铗归来*3 小时前
ASP.NET Core Web API Hangfire
后端·c#·asp.net·.netcore
江东飞过3 小时前
.net core 的文件操作
开发语言·后端·golang
久久不觉3 小时前
.net core 的字符串处理
开发语言·后端·golang
久久不觉3 小时前
.net core 的软件开发工具
开发语言·后端·golang