2017-08-31 130 views
1

似乎无法找到其他的方式转换成这样:转换失败时转换从字符串vb.net日期和/或时间

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

Label1.Text是从员工数据库EmpID Button1.Text是其状态是时间或超时(备考)

守则出席的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, 
) 
+2

的模式。 [Bobby Tables:防止SQL注入的指南](http://bobby-tables.com/) - 和'null'不是一个字符串,所以不要像' “null''。 – SqlZim

+0

那么你面临的问题是什么?什么是错误信息? –

+0

你的问题在这里:Date.Today&“','”&TimeOfDay应该创建一个日期时间我假设?并且你在表中设置了这个日期 - 如果你正在创建一个日期时间,那么当然你需要 - Date.Today&“''”&TimeOfDay - 你的表创建应该是checkdate datetime, – jimmy8ball

回答

1

这是一个terrib用来编写/运行数据库查询的方式。基本上发生的事情是,当SQL字符串正在被组装时,你的日期值被变成一个字符串表示,但是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的等)

你的代码IS,是一个巨大的安全风险,批发您应该使用参数化查询,以完全避免

+0

感谢您的评论。我学到了很多。 –

相关问题