1

似乎找不到其他方法来转换它:

sql = "insert into Attendance values('" & Label1.Text & "','" & Button1.Text & "','" & Date.Today & "','" & TimeOfDay & "','null' )

Label1.TextEmpID来自员工数据库 Button1.Text 是 Time In 或 Time Out 的状态(备注)

SQL Server考勤管理中的代码是:

create table Attendance
(
 EmpID varchar(25) foreign key references Employee(EmpID),
 remarks varchar (25) primary key not null,
 checkdate date,
 tin time,
 tout time,
)
4

1 回答 1

1

这是编写/运行数据库查询的糟糕方式。基本上发生的事情是,当组装 SQL 字符串时,Visual Basic 将您的日期值转换为字符串表示形式,但是 sql-server 无法将生成的字符串转换回日期

幸运的是,它不必,您应该专门编写查询,这样它就不必

它应该看起来更像这样:

Dim sqlC as New SqlCommand("INSERT INTO attendance VALUES(@emp, @rem, @dat, @tin, null)", myConnectionStringVariable)
sqlC.Parameters.AddWithValue("emp", Label1.Text)
sqlC.Parameters.AddWithValue("rem", Button1.Text)
sqlC.Parameters.AddWithValue("dat", Date.Today)
sqlC.Parameters.AddWithValue("tin", DateTime.Now)

请至少查看一些关于参数化查询的教程。永远不要(永远)再编写一个 SQL,其中您想要包含在 SQL 中的值(来自某个 UI 组件)是连接到 SQL 命令字符串中的字符串

更好的是,停止在按钮单击事件处理程序中编写 SQL 代码,并使用 ORM 库(数据集、实体框架、nhibernate 等)

您的代码是一个巨大的安全风险,并且是一种完全可以避免的模式

于 2017-08-31T12:24:59.613 回答