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

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

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

相关文章

数据结构中的栈(C语言版)

一.栈的概念 栈是一种常见的数据结构&#xff0c;它遵循后进先出的原则。栈可以看作是一种容器&#xff0c;其中的元素按照一种特定的顺序进行插入和删除操作。 压栈&#xff1a;栈的插入操作叫做进栈/压栈/入栈&#xff0c;入数据在栈顶。 出栈&#xff1a;栈的删除操作叫做…

区块链技术:DAPP开发

随着科技的飞速发展&#xff0c;区块链技术逐渐渗透到各个领域&#xff0c;其中DAPP&#xff08;去中心化应用&#xff09;的发展尤为引人注目。作为一种新型的应用程序&#xff0c;DAPP正在重塑未来商业生态&#xff0c;其潜力无可估量。 一、DAPP的定义和特点 DAPP是指基于…

基于ssm+vue+Mysql的房屋租赁系统求租合同

开发语言&#xff1a;Java框架&#xff1a;ssmJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.…

交通运输智慧监管平台---强化物流安全与效率的新举措

一、建设背景 随着社会对于交通安全和环境保护的要求不断提高&#xff0c;对卡车运输的监管和合规性要求也逐渐加强。为了满足快速发展的物流需求&#xff0c;提高供应链协同和可追溯性、解决安全问题、提高运输效率和降低成本&#xff0c;我们利用现代技术和信息化手段着力建设…

ctfshow——SQL注入

文章目录 SQL注入基本流程普通SQL注入布尔盲注时间盲注报错注入——extractvalue()报错注入——updataxml()Sqlmap的用法 web 171——正常联合查询web 172——查看源代码、联合查询web 173——查看源代码、联合查询web 174——布尔盲注web 176web 177——过滤空格web 178——过…

nginx下载安装配置(含ssl)

下载安装环节 wget https://nginx.org/download/nginx-1.24.0.tar.gz tar -zxvf xxx.tar.gz yum -y install pcre-devel openssl openssl-devel ./configure --prefix/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream make & make i…

HTTP协议 --中

http状态码 当浏览者访问一个网页时&#xff0c;浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前&#xff0c;此网页所在的服务器会返回一个包含HTTP 状态码的信息头&#xff08; server header &#xff09;用以响应浏览器的请求。 HTTP 状态码的英文为…

【面试经典 150 | 数组】接雨水

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;预处理方法二&#xff1a;单调栈方法三&#xff1a;双指针 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff…

AI大模型日报#0430:疑似GPT4.5模型刷屏、上交实现「蛋白质功能定向进化」、微软紧急撤回WizardLM-2

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了今日要点以及每条资讯的摘要。 《AI大模型日报》今日要点&#xff1a; 在AI大模型领域&#xff0c;多项研究进展和行业应用动态引发关注。一夜之间&#x…

Opencv_14_多边形填充与绘制

绘制多边形&#xff1a; 1&#xff09;coInvert.polyline_drawing(src); 2&#xff09;void ColorInvert::polyline_drawing(Mat& image) { Mat canvas Mat::zeros(Size(512, 512), CV_8UC3); Point p1(100, 100); Point p2(150, 100); Point p3(200…

vue3 安装-使用之第一篇

首先需要node版本高于V16.14.1 安装 执行 npm create vitelatest 具体选择按照自己实际需要的来 Project name:项目名称 Select a framework:选择用哪种框架 &#xff08;我选择vue&#xff09; Select a variant: 选择用JS还是TS&#xff08;我选择JS&#xff09;找到项目&…

kotlinDSL控制的安卓项目导入已存在的模块后sync报错

原因很明显&#xff0c;但是我还找了好久 因为在import时并没有选择groove还是kotlin控制&#xff0c; 所以默认为groovy控制的&#xff0c;然而主项目是由kotlin dsl控制的grale行为。 原因清楚之后&#xff0c;就可以去检查一下&#xff0c;项目里是否包含了settings.gradle和…

rk3588部署yolov8视频目标检测教程

1. 环境配置 1.1 训练和导出onnx环境 #使用conda创建一个python环境 conda create -n torch python3.9#激活环境 conda activate torch#安装yolov8 pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple 1.2 导出rknn环境 安装toolkit2-1.5.2 下载链接&am…

使用 LlamaIndex 和 Llama 2-Chat 构建知识驱动的对话应用程序

文章目录 使用 LlamaIndex 和 Llama 2-Chat 构建知识驱动的对话应用程序Llama 2-70B-聊天LlamaIndex 解决方案概述先决条件使用 SageMaker JumpStart 部署 GPT-J 嵌入模型使用 SageMaker Python SDK 进行部署在 SageMaker Studio 中使用 SageMaker JumpStart 进行部署使用 Sage…

如何查看我的Docker 容器和 `app.py` 脚本有足够的权限来读取 `config.json` 文件

要检查 Docker 容器和 app.py 脚本是否具有读取 config.json 文件的足够权限&#xff0c;你可以按照以下步骤操作&#xff1a; 检查宿主机上的文件权限&#xff1a; 在宿主机上&#xff0c;使用 ls -l 命令查看 config.json 文件的权限。 ls -l /path/to/config.json确保该文件…

聊聊Mysql的两阶段提交

从图中可看出&#xff0c;事务的提交过程有两个阶段&#xff0c;就是将 redo log 的写入拆成了两个步骤&#xff1a;prepare 和 commit&#xff0c;中间再穿插写入bin log&#xff0c;具体如下&#xff1a; prepare 阶段&#xff1a;将 事务的修改写入到 redo log&#xff0c;同…

Java | Leetcode Java题解之第62题不同路径

题目&#xff1a; 题解&#xff1a; class Solution {public int uniquePaths(int m, int n) {long ans 1;for (int x n, y 1; y < m; x, y) {ans ans * x / y;}return (int) ans;} }

设计模式-01 设计模式单例模式

设计模式-01 设计模式单例模式 目录 设计模式-01 设计模式单例模式 1定义 2.内涵 3.使用示例 4.具体代码使用实践 5.注意事项 6.最佳实践 7.总结 1 定义 单例模式是一种设计模式&#xff0c;它确保一个类只能被实例化一次。它通过在类内部创建类的唯一实例并提供一个全…

Mysql从入门到精通——Mysql知识点总结(基础篇)

参考视频 黑马程序员 MySQL数据库入门到精通i 题单推荐 入门 进阶 SQL语句类型 DDL:数据定义语言&#xff0c;用来定义数据库对象(数据库&#xff0c;表&#xff0c;字段)DML:数据操作语言&#xff0c;对数据库表中的数据进行增删改DQL:数据查询语言,用来查询数据库中表的…

SpringCloud 学习笔记 —— 六、Ribbon:负载均衡(基于客户端)

SpringCloud 学习笔记 —— 一、背景-CSDN博客 SpringCloud 学习笔记 —— 二、微服务与微服务架构-CSDN博客 SpringCloud 学习笔记 —— 三、SpringCloud 入门概述-CSDN博客 SpringCloud 学习笔记 —— 四、SpringCloud Rest 学习环境搭建&#xff1a;服务提供者-CSDN博客 …