开发者社区> 问答> 正文

在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()

展开
收起
Puppet 2020-01-05 10:51:48 516 0
1 条回答
写回答
取消 提交回答
  • 该代码还有其他问题,但我将集中讨论与您所陈述的问题最直接相关的两个问题。

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

    2020-01-05 10:52:49
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载