vb.net - PostgreSQL:VB.NET ODBC 更新无法正常工作
问题描述
VB.NET 2019
Postgre 10
Postgre ODBC
DBeaver 中的源数据:
https://i86.fastpic.ru/big/2019/0716/b9/_8741664f3e9495646d995a9d96b846b9.png
试图改变 SQL 状态,改变参数传递:
'Dim command As New Odbc.OdbcCommand("UPDATE public.v8users SET Data = @data WHERE ID = @id", Connection) 'MSSQL syntax
'Dim command As New Odbc.OdbcCommand("UPDATE public.v8users SET data = ?, name = ? WHERE id = ?", Connection)
'Dim command As New Odbc.OdbcCommand("UPDATE public.v8users SET data = ?data WHERE id = ?id", Connection) 'MySQL syntax
'Dim command As New Odbc.OdbcCommand("UPDATE public.v8users SET data = ? WHERE id = decode(encode(?, 'hex'), 'hex')", Connection) 'PostgreSQL syntax
'command.Parameters.Add(New Odbc.OdbcParameter("@id", SQLUser.ID))
'command.Parameters.Add(New Odbc.OdbcParameter("@data", NewBytes))
'command.Parameters.Add(New Odbc.OdbcParameter("id", SqlDbType.Binary)).Value = SQLUser.ID
'command.Parameters.Add(New Odbc.OdbcParameter("data", SqlDbType.Binary)).Value = NewBytes
'command.Parameters.Add(New Odbc.OdbcParameter("name", Odbc.OdbcType.Binary)).Value = NewBytes
Structure SQLUser
Dim ID As Byte()
Dim IDStr As String
Dim Name As String
Dim Descr As String
Dim Data As Byte()
Dim DataStr As String
Dim PassHash As String
Dim PassHash2 As String
Dim AdmRole As String
Dim KeySize As Integer
Dim KeyData As Byte()
End Structure
Dim a
Dim Connection = New Odbc.OdbcConnection("Driver={PostgreSQL Unicode};Server=192.168.2.10;Database=TestPurp;Uid=<correct>;Pwd=<correct>;UseServerSidePrepare=1;ReadOnly=0")
Dim command As New Odbc.OdbcCommand("UPDATE public.v8users SET data = ? WHERE id = ?", Connection)
command.Parameters.Clear()
command.Parameters.Add(New Odbc.OdbcParameter("id", Odbc.OdbcType.Binary)).Value = SQLUser.ID
command.Parameters.Add(New Odbc.OdbcParameter("data", Odbc.OdbcType.Binary)).Value = NewBytes
a = command.ExecuteNonQuery()
a = 0,期望 a = 1
解决方案
尝试按照它们出现在 Update 语句中的相同顺序添加参数。首先添加数据,然后添加 id。
command.Parameters.Add(New Odbc.OdbcParameter("data", Odbc.OdbcType.Binary)).Value = NewBytes
command.Parameters.Add(New Odbc.OdbcParameter("id", Odbc.OdbcType.Binary)).Value = SQLUser.ID
这与使用 OleDb 提供程序的 Access 中的工作方式相同。
推荐阅读
- html - AlpineJS - preventDefault 触发事件
- python-3.x - 用 python 3 修改 mule XML 文件
- haskell - 如何删除 Haskell 中的守卫中的解析错误?
- sql - SQL将值添加到特定位置的单元格中
- memory - 我应该为我的 TimesTen 数据库使用大页面吗?如果是,我该如何配置它?
- c++ - 歧义运算符<< Clang 中的重载
- spring - spring Webclient泛型结果
.class 不起作用 - python - 如何在 anaconda3 python 上运行 anaconda2 python
- javascript - 使用 require('...') 在 react js 中动态导入图像不再起作用
- javascript - 更新许多图表时的绘图性能