当前位置: 首页 > article >正文

vb.net oledb-Access 数据库本身不支持命名参数,赋值必须和参数顺序一致才行

参数顺序问题:OleDb 通常依赖参数添加的顺序而非名称,为什么顺序要一样?

OleDbParameter 顺序依赖性的原因

OleDb 数据提供程序依赖参数添加顺序而非名称,这是由 OLE DB 规范和 Access 数据库的工作机制共同决定的。理解这个问题需要从数据库底层通信机制说起。

1. SQL 参数化查询的两种实现方式

(1)基于名称的参数化(如 SQL Server)
-- SQL Server 支持命名参数
SELECT * FROM Users WHERE Username = @Username AND Age > @MinAge

在这种模式下,参数顺序不重要,只要名称匹配即可。

(2)基于位置的参数化(如 OleDb)
-- OleDb 使用问号占位符(实际执行时的形式)
SELECT * FROM Users WHERE Username = ? AND Age > ?

OleDb 将参数按添加顺序绑定到问号占位符,参数名称仅用于代码可读性,不影响实际绑定。

2. Access 数据库的限制

Access 数据库(通过 OleDb 提供程序访问)不支持命名参数,仅支持位置参数。当您编写:

UPDATE [02Excel题库] SET [下载状态]=@状态, [下载出错]=@err WHERE id=@id

OleDb 提供程序会将其转换为:sql

UPDATE [02Excel题库] SET [下载状态]=?, [下载出错]=? WHERE id=?

此时,参数必须按以下顺序添加:

  1. @状态(对应第一个问号)
  2. @err(对应第二个问号)
  3. @id(对应第三个问号)

3. 为什么您的代码可能出现问题

您的原始代码参数添加顺序是:

cmd.Parameters.Add(paramErr)   ' @err (第二个问号)
cmd.Parameters.Add(paramId)    ' @id (第三个问号)
cmd.Parameters.Add(状态)       ' @状态 (第一个问号)

这会导致参数与 SQL 语句中的占位符错位:

  • @err 值被绑定到 [下载状态]
  • @id 值被绑定到 [下载出错]
  • @状态 值被绑定到 id

这就解释了为什么状态.Value = -1没有生效 —— 它被错误地绑定到了id字段!

4. 正确的参数添加顺序

必须与 SQL 语句中参数出现的顺序一致:

' 1. 添加@状态 (对应SET [下载状态]=?)
cmd.Parameters.Add("@状态", OleDbType.Integer).Value = If(String.IsNullOrWhiteSpace(ErrUrlList), 0, -1)' 2. 添加@err (对应SET [下载出错]=?)
cmd.Parameters.Add("@err", OleDbType.LongVarWChar, -1).Value = ErrUrlList' 3. 添加@id (对应WHERE id=?)
cmd.Parameters.Add("@id", OleDbType.Integer).Value = task.DbId

5. 最佳实践建议

(1)始终按 SQL 中参数出现的顺序添加参数
-- SQL: SET [下载状态]=@状态, [下载出错]=@err WHERE id=@id
-- 参数顺序必须是: @状态 → @err → @id
(2)使用更安全的参数添加方式
' 链式添加参数,确保顺序正确
cmd.Parameters.AddWithValue("@状态", If(String.IsNullOrWhiteSpace(ErrUrlList), 0, -1))
cmd.Parameters.AddWithValue("@err", ErrUrlList)
cmd.Parameters.AddWithValue("@id", task.DbId)
(3)考虑使用其他数据提供程序

如果需要命名参数支持,可以考虑:

  • SQL Server(支持命名参数)
  • SQLite(使用 SQLiteDataProvider,支持命名参数)
  • Entity Framework(抽象掉底层参数细节)

总结

OleDb 依赖参数顺序而非名称,是因为 Access 数据库本身不支持命名参数。当使用 OleDb 操作 Access 时,必须确保参数添加顺序与 SQL 语句中占位符的出现顺序一致,否则会导致参数值绑定错误。这是您的代码中状态.Value = -1未能正确写入的根本原因。

Using trans = conn.BeginTransaction()TryFor Each task In SaveDbTasksDim sql = "UPDATE [02Excel题库] SET [下载状态]=@状态, [下载出错]=@err WHERE id=@id"Using cmd As New OleDbCommand(sql, conn, trans)Dim ErrUrlList As String = String.Join(vbCrLf, task.ErrUrlList)' 添加参数(注意顺序必须与SQL中参数出现的顺序一致)cmd.Parameters.Add("@状态", OleDbType.Integer).Value = If(String.IsNullOrWhiteSpace(ErrUrlList), 0, -1)cmd.Parameters.Add("@err", OleDbType.LongVarWChar, -1).Value = ErrUrlListcmd.Parameters.Add("@id", OleDbType.Integer).Value = task.DbId' 调试输出(实际使用时可移除或改为日志记录)Console.WriteLine($"执行更新 - ID: {task.DbId}, 状态: {If(String.IsNullOrWhiteSpace(ErrUrlList), 0, -1)}, 错误: {ErrUrlList}")Dim rowsAffected = cmd.ExecuteNonQuery()' 验证更新是否成功If rowsAffected = 0 ThenLogger.LogError($"更新失败: ID={task.DbId}, ErrUrlList={ErrUrlList}", "DatabaseUpdate")End IfEnd UsingNexttrans.Commit()Logger.LogError($"批量更新成功: {SaveDbTasks.Count} 条记录", "DatabaseUpdate")Catch ex As Exception' 发生异常时回滚事务trans.Rollback()Logger.LogError($"批量更新失败: {ex.Message}", "DatabaseUpdate")Throw ' 重新抛出异常以便上层处理End Try
End Using ' 事务会在这里自动释放

相关文章:

vb.net oledb-Access 数据库本身不支持命名参数,赋值必须和参数顺序一致才行

参数顺序问题:OleDb 通常依赖参数添加的顺序而非名称,为什么顺序要一样? OleDbParameter 顺序依赖性的原因 OleDb 数据提供程序依赖参数添加顺序而非名称,这是由 OLE DB 规范和 Access 数据库的工作机制共同决定的。理解这个问题需要从数据库底层通信…...

Abaqus连接器弹片正向力分析:

.学习重点: • 外部幾何匯入。 • 建立解析剛性面。 • 利用Partition與局部撒點來提高網格品質。 • 材料塑性行為(材料非線性)。 • 考慮大變形(幾何非線性)。 • 接觸(邊界非線性)。 • 平移組裝。 • 設定輸出參數。 • 討論Shear Locking & Hourglassing效應。 1) 設…...

鸿蒙生态再添翼:身份证银行卡识别引领智能识别技术新篇章

随着信创国产化战略的深入推进和鸿蒙操作系统(HarmonyOS Next)的迅速崛起,市场对兼容国产软件生态的需求日益增长。在这一背景下,中安身份证识别和银行卡识别技术应运而生,为鸿蒙生态的发展注入了新的活力。 移动端身份…...

mybatis打印完整的SQL,p6spy

介绍打印完成的SQL,会降低性能,不要在生产环境使用,我只是在本地,自己的代码中设置,不提交。主要是为了方便,在控制台看见SQL的时候,不用去拼接参数,可以直接复制出来执行。 配置方…...

NLP学习路线图(十九):GloVe

自然语言处理(NLP)的核心挑战在于让机器理解人类语言的丰富含义。词向量(Word Embeddings)技术通过将词语映射到高维实数空间,将离散的符号转化为连续的向量,为NLP任务奠定了坚实基础。在众多词向量模型中&…...

如何使用DAXStudio将PowerBI与Excel连接

如何使用DAXStudio将PowerBI与Excel连接 之前分享过一篇自动化文章:PowerBI链接EXCEL实现自动化报表,使用一个EXCEL宏工作薄将PowerBI与EXCEL连接起来,今天分享另一个方法:使用DAX Studio将PowerBI与EXCEL连接。 下面是使用DAX S…...

软考 系统架构设计师系列知识点之杂项集萃(79)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(78) 第141题 软件测试一般分为两个大类:动态测试和静态测试。前者通过运行程序发现错误,包括()等方法;后者采用人工和计算机…...

神经网络基础:从单个神经元到多层网络(superior哥AI系列第3期)

🧠 神经网络基础:从单个神经元到多层网络(superior哥AI系列第3期) 哈喽!各位AI探索者们!👋 上期我们把数学"怪兽"给驯服了,是不是感觉还挺轻松的?今天我们要进…...

UVa12298 Super Joker II

UVa12298 Super Joker II 题目链接题意输入格式输出格式 分析AC 代码 题目链接 UVa12298 Super Joker II 题意 有一副超级扑克,包含无数张牌。对于每个正合数p,恰好有4张牌:黑桃p,红桃p,梅花p和方块p(分别…...

面向对象系统中对象交互的架构设计哲学

更多精彩请访问:通义灵码2.5——基于编程智能体开发Wiki多功能搜索引擎-CSDN博客 一、对象交互的本质与设计矛盾 在面向对象范式(OOP)中,对象间的交互实质上是软件组件解耦与功能复用的动态平衡过程。每个对象作为独立的计算单元,既需要维护…...

【网络安全】SRC漏洞挖掘思路/手法分享

文章目录 Tip1Tip2Tip3Tip4Tip5Tip6Tip7Tip8Tip9Tip10Tip11Tip12Tip13Tip14Tip15Tip16Tip17Tip18Tip19Tip20Tip21Tip22Tip23Tip24Tip25Tip26Tip27Tip28Tip29Tip30Tip1 “复制该主机所有 URL”:包含该主机上的所有接口等资源。 “复制此主机里的链接”:包括该主机加载的第三…...

【AFW+GRU(CNN+RNN)】Deepfakes Detection with Automatic Face Weighting

文章目录 Deepfakes Detection with Automatic Face Weighting背景pointsDeepfake检测挑战数据集方法人脸检测面部特征提取自动人脸加权门控循环单元训练流程提升网络测试时间增强实验结果Deepfakes Detection with Automatic Face Weighting 会议/期刊:CVPRW 2020 作者: …...

【面试】音视频面试

C内存模型 H.265(HEVC)相比H.264(AVC)的核心优势 1. 压缩效率显著提升 在相同画质下,H.265的码率比H.264降低约40-50%,尤其适用于4K/8K超高清场景。通过**更大的编码单元(CTU,最大…...

性能优化 - 案例篇:缓冲区

文章目录 Pre1. 引言2. 缓冲概念与类比3. Java I/O 中的缓冲实现3.1 FileReader vs BufferedReader:装饰者模式设计3.2 BufferedInputStream 源码剖析3.2.1 缓冲区大小的权衡与默认值 4. 异步日志中的缓冲:Logback 异步日志原理与配置要点4.1 Logback 异…...

Java编程之建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。这种模式允许你分步骤构建一个复杂对象,并且可以在构建过程中进行不同的配置。 模式的核…...

基于TI DSP控制的光伏逆变器最大功率跟踪mppt

基于TI DSP(如TMS320F28335)控制的光伏逆变器最大功率跟踪(MPPT)程序通常涉及以下几个关键部分:硬件电路设计、MPPT算法实现、以及DSP的编程。以下是基于TI DSP的光伏逆变器MPPT程序的一个示例,主要采用扰动…...

Python玩转自动驾驶仿真数据生成:打造你的智能“路测场”

Python玩转自动驾驶仿真数据生成:打造你的智能“路测场” 说到自动驾驶,很多人第一时间想到的是那些造车新势力、激光雷达、传感器、深度学习模型……确实,这些都是自动驾驶的核心硬核。但我今天想和你聊聊一个“幕后功臣”——仿真数据生成。没错,自动驾驶离不开大数据,更…...

从测试角度看待CI/CD,敏捷开发

什么是敏捷开发? 是在高强度反馈的情况下,短周期,不断的迭代产品,满足用户需求,抢占更多的市场 敏捷开发是什么? 是一种产品快速迭代的情况下,降低出错的概率,具体会落实到公司的…...

agent mode 代理模式,整体要求,系统要求, 系统指令

1. 起因, 目的: 我发现很多时候,我在重复我的要求。很烦。决定把一些过程记录下来,提取一下。 2. 先看效果 无。 3. 过程: 要求: 这2个文件,是我与 AI 聊天的一些过程记录。 请阅读这2个文件,帮我提取出一些共同…...

ES101系列07 | 分布式系统和分页

本篇文章主要讲解 ElasticSearch 中分布式系统的概念,包括节点、分片和并发控制等,同时还会提到分页遍历和深度遍历问题的解决方案。 节点 节点是一个 ElasticSearch 示例 其本质就是一个 Java 进程一个机器上可以运行多个示例但生产环境推荐只运行一个…...

Spring AI Advisor机制

Spring AI Advisors 是 Spring AI 框架中用于拦截和增强 AI 交互的核心组件,其设计灵感类似于 WebFilter,通过链式调用实现对请求和响应的处理5。以下是关键特性与实现细节: 核心功能 ‌1. 请求/响应拦截‌ 通过 AroundAdvisor 接口动态修…...

Vue3 + Vite:我的 Qiankun 微前端主子应用实践指南

前言 实践文章指南 vue微前端qiankun框架学习到项目实战,基座登录动态菜单及权限控制>>>>实战指南:Vue 2基座 Vue 3 Vite TypeScript微前端架构实现动态菜单与登录共享>>>>构建安全的Vue前后端分离架构:利用长Token与短Tok…...

使用ArcPy生成地图系列

设置地图布局 在生成地图系列之前,需要先设置地图布局。这包括定义地图的页面大小、地图框的位置和大小、标题、图例等元素。ArcPy提供了arcpy.mp.ArcGISProject方法来加载ArcGIS Pro项目文件(.aprx),并操作其中的地图布局。 Py…...

日语输入法怎么使用罗马字布局怎么安装日语输入法

今天帮客户安装日语输入法的时候遇到了一个纠结半天的问题,客户一直反馈说这个输入法不对,并不是他要的功能。他只需要罗马字的布局,而不是打出来字的假名。 片假名、平假名,就好像英文26个字母,用于组成日文单词。两…...

U盘挂载Linux

在 只能使用 Telnet 的情况下,如果希望通过 U盘 传输文件到 Linux 系统,可以按照以下步骤操作: 📌 前提条件 U盘已插入 Linux 主机的 USB 接口。Linux 主机支持自动挂载 U盘(大多数现代发行版默认支持)。T…...

数据结构:栈(Stack)和堆(Heap)

目录 内存(Memory)基础 程序是如何利用主存的? 🎯 静态内存分配 vs 动态内存分配 栈(stack) 程序执行过程与栈帧变化 堆(Heap) 程序运行时的主存布局 内存(Memo…...

用 Vue 做一个轻量离线的“待办清单 + 情绪打卡”小工具

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...

3D Gaussian splatting 05: 代码阅读-训练整体流程

目录 3D Gaussian splatting 01: 环境搭建3D Gaussian splatting 02: 快速评估3D Gaussian splatting 03: 用户数据训练和结果查看3D Gaussian splatting 04: 代码阅读-提取相机位姿和稀疏点云3D Gaussian splatting 05: 代码阅读-训练整体流程3D Gaussian splatting 06: 代码…...

Linux——计算机网络基础

一、网络 1.概念 由若干结点和连接结点的链路组成。结点可以是计算机,交换机,路由器等。 2.互联网 多个网络连接起来就是互联网。 因特网:最大的互联网。 二、IP地址和MAC地址 1.IP地址 (1)概念 IP地址是给因…...

第2章_Excel_知识点笔记

来自: 第2章_Excel_知识点笔记 原笔记 Excel 知识点总结(第2章) Excel_2.1 知识点 基础操作 状态栏:快速查看计数/求和等数据(右键可配置)。筛选(CtrlShiftL):按条件显…...