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代码中包含以下内容:
Img = '@Spic'
那是错的。如果要在VB中使用变量的值,是否将变量的名称用双引号引起来?当然不会!那将使用String包含变量名而不是变量本身值的a。考虑到这一点,当SQL中单引号的目的专门表示文字字符串时,为什么将SQL参数的名称包装在单引号中?
即使您修复了该问题,由于以下原因,它仍然无法使用:
da.UpdateCommand.Parameters.Add(New SqlClient.SqlParameter("@Spic", SqlDbType.Image)).Value = IO.File.ReadAllBytes(ofd.FileName)
da.UpdateCommand = New SqlCommand
您将一个参数添加到当前分配给该UpdateCommand属性的命令对象,然后立即丢弃该命令对象并将其替换为新的。如果您有一碗冰淇淋,并在上面洒了巧克力,然后将冰淇淋扔掉,然后在碗中放了一个新的脆饼,您会惊讶于它上面没有巧克力吗?当然不是。那正是您所期望的,所以您为什么认为这里会有所不同呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。