sql-server - 在 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 代码中有这个:
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,你会惊讶于上面没有巧克力吗?当然不是。这正是您所期望的,那么您为什么认为这里会有所不同呢?
推荐阅读
- javascript - 我正在尝试发出 POST 请求以获取接收访问令牌,但是我收到未定义的。请问我该如何解决?
- javascript - Javascript中的堆栈和调用堆栈有什么区别?
- javascript - 引导表动态数据表不起作用搜索选项和分页
- python - Postgresql & Psycopg2 无法正确选择两个日期之间的数据
- flutter - 将快照数据从一个 dart 文件传递到颤振项目中的另一个文件
- uwp - Microsoft Graph 错误 - 将文件上传到 OneDrive 时找不到段“根:”的资源
- javascript - 如何在 Phaser 3 中每分钟运行一个函数?
- android - 我的硬件是否冲突,导致 AVD 非常慢?
- docker - 如何通过查找纱线来修复 docker 容器中的错误?
- python - 使用像 nltk 这样的 Python 库缩短句子