vb.net - PostgreSQL:VB.NET ODBC 更新无法正常工作

标签 vb.net postgresql odbc

VB.NET 2019

Postgres 10

PostgreODBC

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

最佳答案

尝试按照它们在更新语句中出现的相同顺序添加参数。先添加数据再添加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

这在 Access 中与 OleDb 提供程序的工作方式相同。

关于vb.net - PostgreSQL:VB.NET ODBC 更新无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57060118/

相关文章:

vb.net - .NET 2.0 中带前导零的数字格式

node.js - 如何从选择菜单中提取帖子数据?所选选项链接到 postgresql 数据库

mysql - odbc 驱动程序不支持请求的属性

postgresql - Cognos:通过 ODBC 连接到 PostgreSQL

vb.net - 需要从 DCOM 配置中删除对象 (DCOMCNFG)

.net - 将表单的一个实例的 TextBox 控件的更改值更新到所有实例

postgresql - Postgres : Setting the value of an array with a subquery?

mysql - 带有父子项的分层 SQL 查询

SSIS 包适用于 Visual Studio 和命令行,但不适用于 Agent

javascript - 在 aspx 输入字段上/中插入文本并设置焦点?