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

纯图片网站源码网络营销模式有哪些?

纯图片网站源码,网络营销模式有哪些?,wordpress为什么不能显示域名,wordpress 怎么改字体参数顺序问题:OleDb 通常依赖参数添加的顺序而非名称,为什么顺序要一样? OleDbParameter 顺序依赖性的原因 OleDb 数据提供程序依赖参数添加顺序而非名称,这是由 OLE DB 规范和 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 ' 事务会在这里自动释放
http://www.dtcms.com/wzjs/397327.html

相关文章:

  • 网站登录账号密码保存在哪里百度推广seo是什么意思
  • 如何在阿里云上建设网站营销推广是干什么的
  • 支付集成文件放在网站哪里视频号排名优化帝搜软件
  • 外贸网站 开源站建设行吗网店seo是什么意思
  • 装修公司报价明细表范本外贸seo网站
  • 垂直 社交网站 建设思亿欧seo靠谱吗
  • wordpress企业网站建设alexa排名
  • 南阳微信网站给你一个网站seo如何做
  • 营销方案案例范文1500西安seo工作室
  • 万达做的电商网站网络营销策划方案模板范文
  • 大连市人民政府门户网站百度推广工资多少钱一个月
  • 龙采科技做网站多少钱推广普通话手抄报文字
  • 网站建设捌金手指花总十四海南百度竞价排名
  • 制作人韩剧在线观看免费高清南阳网站seo
  • 网站建设中搜索引擎的作用企业营销策划书
  • 简答题网站建设步骤指数函数求导
  • 个人备案网站可以做支付吗产品推广方法有哪些
  • 手机如何制作网站和网页免费友情链接
  • 河东网站建设长沙seo平台
  • 买空间域名做网站百度置顶广告多少钱
  • 李沧网站建设谁家好创建自己的网址
  • 网站更名策划方案快速优化工具
  • 邢台网站优化建设seo在哪可以学
  • 有没有哪个网站可以做LCM模组免费搭建网站平台
  • 南宁网站建设公司哪家专业企业网站制作需要多少钱
  • 销售类电商网站如何做优化惠州seo代理
  • 单页网站怎么做seo抖来查关键词搜索排名
  • 云南网站建设的价值cps推广平台
  • 如何把网站放在主机上平台seo什么意思
  • 南宁做网站建设seo上海优化