小编典典

如何在一个指定的列中与其他列一起插入一个值,而又不将其单独出现在新的另一行中?

sql

我正在为我们的大学图书馆创建一个登录注销系统,该系统记录学生在进出图书馆时的进出时间。

我将VS 2010 Ultimate用于表单,并将SQL Server 2008 r2用于数据库。

在我的数据库中

我有3张桌子

tblCollegeinfo包含:studentNumber(主键),studentName和studentCourse,

tblCollegeStudentLog包含他们的记录,并再次使用studentNumber作为外键,studentTimeIn,studentTimeOut,studentDate和LoginNo和

tblCollegeStudentPassword再次包含其密码,其中包括studentNumber和studentPassword。

实际上,我的“登录”按钮可以正常工作,只要他们输入用户名和密码并单击“登录”按钮,便可以登录,并且其学生编号,名称,课程登录时间(时间)和日期将显示在ListView中。

我的问题是注销按钮。我不知道我应该使用什么正确的代码。我应该使用什么正确的SQL查询。

我有一个提示,我应该先加入表,然后在“ tblCollegeStudentLog”表的studentTimeOut中将注销时间作为“值”插入

但我不知道怎么做 每当我在ListView中单击带有SelectedItems的Log Out按钮时,而是将Logout Time(Time
Out)插入所选项目中,它就会出现在另一行中。简而言之,如何在一个指定的列中与其他列一起插入一个值,而又不出现在新的另一行中?请帮助我解决这个问题:(我希望您能理解我想说的:(我希望插入的Value与其他列一起出现,因为仅发生在我身上的是,每当我按下Log
Out按钮时,该值仅出现在另一行中,而不是出现在其他列中:(谢谢你们!这里是代码:

私有Sub btnLogoutNow_Click(ByVal发送者作为System.Object,ByVal
e作为System.EventArgs)处理btnLogoutNow.Click Connect()

    cmd = New SqlCommand("SELECT tblCollegeStudentlog.LoginNo, tblCollegeStudentLog.studentNumber, tblCollegeInfo.studentName, tblCollegeInfo.studentCourse, tblCollegeStudentLog.studentTimeIn, tblCollegeStudentLog.studentTimeOut, tblCollegeStudentLog.studentDateIn FROM tblCollegeStudentLog LEFT OUTER JOIN tblCollegeInfo ON tblCollegeStudentLog.studentNumber = tblCollegeInfo.studentNumber WHERE  tblCollegeStudentLog.studentNumber = '" + lvwLog.SelectedItems(0).Text + "'", con)
    cmd.ExecuteNonQuery()


    If dr.HasRows Then
        cmd = New SqlCommand("INSERT INTO tblCollegeStudentLog (studentTimeOut) VALUES     ('" + lblTimeOut.Text + "') WHERE studentNumber = '" + lvwLog.SelectedItems(0).Text + "' ", con)
    cmd.ExecuteNonQuery()

        MsgBox("You are now logged out!")

    End If
End Sub

阅读 159

收藏
2021-04-15

共1个答案

小编典典

您需要使用UPDATE,不INSERT。假设他们不能注销,除非他们已登录(即存在记录tblCollegeStudentLog,其中StudentTimeInNULL,你可以使用:

UPDATE  tblCollegeStudentLog
SET     StudentTimeOut = @OutTime
WHERE   StudentNumber = @StudentNumber
AND     StudentTimeOut IS NULL;

然后,您将使用SqlParameters正确执行命令,而不会使自己对SqlInjection,不良的SQL Plan缓存和数据类型问题感到不安:

Dim Sql as String = "UPDATE tblCollegeStudentLog SET StudentTimeOut = @OutTime WHERE StudentNumber = @StudentNumber AND StudentTimeOut IS NULL;"
Using cmd = New SqlCommand(Sql, con)
    cmd.Parameters.AddWithValue("@OutTime", Convert.ToDateTime(lblTimeOutNya.Text))
    cmd.Parameters.AddWithValue("@StudentNumber", lvwLog.SelectedItems(0).Text)
    con.Open()
    If cmd.ExecuteNonQuery() = 0 Then
        'If no rows are affected then there was not a valid
        'record to update, i.e. the student was not logged in
        MsgBox("You were not logged in")
    Else
        MsgBox("You are now logged out!")
    End If
End Using

注意:请原谅我的VB.NET,因为我已经有一段时间没有使用它了,所以可能存在一些语法错误。

2021-04-15