2017-08-31 98 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

感謝您的評論。我學到了很多。 –

相關問題