【发布时间】:2020-01-04 09:27:56
【问题描述】:
Private Sub UpdateBTN_Click(sender As Object, e As EventArgs) Handles UpdateBTN.Click
Dim IDdelete = Me.DataGridView1.Item(0, Me.DataGridView1.CurrentRow.Index).Value
da.UpdateCommand.Parameters.Add(New SqlClient.SqlParameter("@Spic", SqlDbType.Image)).Value = IO.File.ReadAllBytes(ofd.FileName)
da.UpdateCommand = New SqlCommand
da.UpdateCommand.CommandText = "update Students set Fname = ' " & FnameTXT.Text & "' , Lname = ' " & LnameTXT.Text & "' , DOB = ' " & DateTimePicker1.Value.Date & "' , Address = '" & AddressTXT.Text & "' , Nationality = '" & NationalityCBX.Text & "' , Img = '@Spic' where StudentID = '" & IDdelete & "'"
da.UpdateCommand.Connection = con
con.Open()
da.UpdateCommand.ExecuteNonQuery()
con.Close()
【问题讨论】:
-
首先,修复你巨大的安全漏洞;您的代码对注入开放
-
标题和一些代码从来都不是一个好问题。您始终需要对问题提供完整而清晰的解释,其中包括您想要实现的确切目标、您正在做什么以及执行此操作时会发生什么。
-
您不应该在 SQL Server 中使用
image数据类型。该文档已明确指出它已被弃用十多年,因此没有任何借口。对于任何二进制数据,包括图像数据,都应存储在varbinary列中。 -
你显然知道,一般来说,如何在 ADO.NET 中使用参数,那就去做吧。不要只对二进制数据这样做,而是对所有数据这样做。假设不使用参数来保存用户输入的数据是绝对不安全的。来自应用程序的数据可以是,例如从下拉列表中选择的值,但实际上没有理由不对所有变量数据使用参数。如果你全力以赴,那么你就不会在应该做的时候不做。
标签: sql-server database vb.net