我正在为我们的大学图书馆创建一个登录注销系统,该系统记录学生在进出图书馆时的进出时间。
我将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
您需要使用UPDATE,不INSERT。假设他们不能注销,除非他们已登录(即存在记录tblCollegeStudentLog,其中StudentTimeIn是NULL,你可以使用:
UPDATE
INSERT
tblCollegeStudentLog
StudentTimeIn
NULL
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,因为我已经有一段时间没有使用它了,所以可能存在一些语法错误。