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

news2024/11/20 20:30:58

摘  要

该系统以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 '计算出需要升级所支付的实际费用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1636394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业家必须提升演讲口才的原因(3篇)

企业家必须提升演讲口才的原因&#xff08;3篇&#xff09; **篇&#xff1a;企业家必须提升演讲口才的原因——建立品牌影响力 一、引言 在当今竞争激烈的市场环境中&#xff0c;企业家作为企业的灵魂和代表&#xff0c;其个人形象和品牌影响力对于企业的成功至关重要。而演…

【大语言模型LLM】-基于ChatGPT搭建客服助手(1)

&#x1f525;博客主页&#xff1a;西瓜WiFi &#x1f3a5;系列专栏&#xff1a;《大语言模型》 很多非常有趣的模型&#xff0c;值得收藏&#xff0c;满足大家的收集癖&#xff01; 如果觉得有用&#xff0c;请三连&#x1f44d;⭐❤️&#xff0c;谢谢&#xff01; 长期不…

Java File类

1. File类概述 1.1 什么是File类 File是java.io包下作为文件和目录的类。File类定义了一些与平台无关的方法来操作文件&#xff0c;通过调用File类中的方法可以得到文件和目录的描述信息&#xff0c;包括名称、所在路径、读写性和长度等&#xff0c;还可以对文件和目录进行新建…

C语言 | Leetcode C语言题解之第61题旋转链表

题目&#xff1a; 题解&#xff1a; struct ListNode* rotateRight(struct ListNode* head, int k) {if (k 0 || head NULL || head->next NULL) {return head;}int n 1;struct ListNode* iter head;while (iter->next ! NULL) {iter iter->next;n;}int add n…

c#数据库: 9.删除和添加新字段/数据更新

先把原来数据表的sexy字段删除,然后重新在添加字段sexy,如果添加成功,sexy列的随机内容会更新.原数据表如下: using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.SqlClient; using System.Linq; using System.…

3D看车有哪些强大的功能?适合哪些企业使用?

3D看车是一种创新的汽车展示方式&#xff0c;它提供了许多强大的功能&#xff0c;特别适合汽车行业的企业使用。 3D看车可实现哪些功能&#xff1f; 1、细节展示&#xff1a; 51建模网提供全套汽车行业3D数字化解决方案&#xff0c;3D看车能够将汽车展示得更加栩栩如生&…

ClickHouse高原理与实践

ClickHouse高原理与实践 1 ClickHouse的特性1.1. OLAP1.2. 列式存储1.3. 表引擎1.4. 向量化执行1.5. 分区1.6. 副本与分片1.7 其他特性 2. ClickHouse模块设计2.1 Parser分析器与Interpreter解释器2.2 Storage2.3 Column与Field2.4 DataType2.4 Block2.5 Cluster与Replication …

C语言.自定义类型:结构体

自定义类型&#xff1a;结构体 1.结构体类型的声明1.1结构体回顾1.1.1结构体的声明1.1.2结构体变量的创建和初始化 1.2结构体的特殊声明1.3结构体的自引用 2.结构体内存对齐2.1对齐规则2.2为什么存在内存对齐2.3修改默认对齐数 3.结构体传参4.结构体实现位段4.1什么是位段4.2位…

【Linux系统编程】30.pthread_exit、pthread_join、pthread_cancel

目录 pthread_exit 参数retval 测试代码1 测试结果 pthread_join 参数thread 参数retvsl 返回值 测试代码2 测试结果 pthread_cancel 参数thread 返回值 测试代码3 测试结果 pthread_exit 退出当前线程。 man 3 pthread_exit 参数retval 退出值。 NULL&#xf…

我用文心4.0给你做了一个“五一旅行助手”!行程规划、实时查询、景区讲解!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

使用Gradio搭建聊天UI实现质谱AI智能问答

一、调用智谱 AI API 1、获取api_key 智谱AI开放平台网址&#xff1a; https://open.bigmodel.cn/overview 2、安装库pip install zhipuai 3、执行一下代码&#xff0c;调用质谱api进行问答 from zhipuai import ZhipuAIclient ZhipuAI(api_key"xxxxx") # 填写…

Visual studio 2019 编程控制CH341A芯片的USB设备

1、硬件 买了个USB可转IIC、或SPI、或UART的设备&#xff0c;主芯片是CH341A 主要说明USB转SPI的应用&#xff0c;绿色跳线帽选择IIC&SPI&#xff0c;用到CS0、SCK、MOSI、MISO这4个引脚 2、软件 2.1、下载CH341A的驱动 点CH341A官网https://www.wch.cn/downloads/CH34…

OpenCV如何实现背投(58)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV直方图比较(57) 下一篇&#xff1a;OpenCV如何模板匹配(59) 目标 在本教程中&#xff0c;您将学习&#xff1a; 什么是背投以及它为什么有用如何使用 OpenCV 函数 cv::calcBackP…

Mac好用又好看的终端iTerm2 + oh-my-zsh

Mac好用又好看的终端iTerm2 1. iTerm2的下载安装2. oh-my-zsh的安装2.1 官网安装方式2.2 国内镜像源安装方式 3. oh-my-zsh配置3.1 存放主题的路径3.2 存放插件的路径3.3 配置文件路径 1. iTerm2的下载安装 官网下载&#xff1a; iTerm2 2. oh-my-zsh的安装 oh-my-zsh是一…

设备能源数据采集新篇章

在当今这个信息化、智能化的时代&#xff0c;设备能源数据的采集已经成为企业高效运营、绿色发展的重要基石。而今天&#xff0c;我们要向大家介绍的就是一款颠覆传统、引领未来的设备能源数据采集神器——HiWoo Box网关&#xff01; 一、HiWoo Box网关&#xff1a;一站式解决…

C++11:shared_ptr循环引用问题

一、shared_ptr的弊端 struct Listnode {int _val;std::shared_ptr<Listnode> _prev;std::shared_ptr<Listnode> _next;Listnode(int val ):_val(val),_prev(nullptr),_next(nullptr){}~Listnode(){cout << "~Listnode()" << endl;} }; in…

探索未来,开启元宇宙之旅!

一、什么是元宇宙 元宇宙&#xff0c;这个词汇逐渐进入了公众的视野&#xff0c;引发了人们无尽的想象。 首先&#xff0c;元宇宙是什么&#xff1f;元宇宙&#xff0c;顾名思义&#xff0c;是一个虚拟现实的世界&#xff0c;一个融合了数字、物理和社交空间的全息图。它不仅…

【数据结构】位图与布隆过滤器

目录 前言 位图的概念 经典面试题目 位图的模拟实现 set() reset() test() 位图整体代码 位图的应用 位图的优缺点 布隆过滤器 布隆过滤器的概念 哈希函数的个数与布隆过滤器长度的关系 布隆过滤器的模拟实现 插入 查找 删除 布隆过滤器整体代码 前言 哈希本质…

nginx缓存清理

背景 昨天打开我的gpt镜像网站&#xff0c;意外发现静态图片资源全都无法获取了 CoCo-AI 一番排查下来&#xff0c;发现是引用的cdn链接失效了 且cdn源是属于七牛云的&#xff0c;且不再维护&#xff0c;于是果断切换到cloudflare export function getEmojiUrl(unified: str…

iBarcoder for Mac:一站式条形码生成软件

在数字化时代&#xff0c;条形码的应用越来越广泛。iBarcoder for Mac作为一款专业的条形码生成软件&#xff0c;为用户提供了一站式的解决方案。无论是零售、出版还是物流等行业&#xff0c;iBarcoder都能轻松应对&#xff0c;助力用户实现高效管理。 iBarcoder for Mac v3.14…