首页 > 解决方案 > 在 VB 和 SQL Server 中更新图像不起作用

问题描述

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-serverdatabasevb.net

解决方案


该代码还有其他问题,但我将专注于与您陈述的问题最直接相关的两个问题。

首先,你的 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属性的命令对象,然后立即丢弃该命令对象并用新对象替换它。如果你有一碗冰淇淋,然后在上面撒上巧克力,然后把冰淇淋扔进去,然后在碗里放一个新的scopp,你会惊讶于上面没有巧克力吗?当然不是。这正是您所期望的,那么您为什么认为这里会有所不同呢?


推荐阅读