You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用go-mssqldb插入数据时报sql: expected 0 arguments got 3错误怎么办

问题原因
  • github.com/denisenkom/go-mssqldb驱动默认不会自动识别@开头的命名参数占位符,导致database/sql标准库判断当前SQL语句不需要传入任何参数,你实际传入3个参数就触发了参数数量不匹配的报错。
解决方案

方案1:使用问号占位符(最简兼容方案)

直接将SQL语句中的命名参数替换为通用问号占位符,不需要调整连接配置,参数顺序和占位符顺序一一对应即可:

tsql := "INSERT INTO Uploads (Fname, Fsize, Ftype) VALUES (?, ?, ?);"
fmt.Printf("tsql = %s\n", tsql)

// 直接按顺序传参即可,无需sql.Named封装
res, err := db.ExecContext(
    ctx,
    tsql,
    fname,
    fsize,
    ftype)

if err != nil {
    log.Fatal(" AddRow_v1() -> 新增行报错: " + err.Error())
    return -1, err
}

方案2:开启驱动命名参数支持

如果需要保留命名参数写法,只需在连接数据库的DSN(连接字符串)中添加namedparameters=true配置项,驱动就会自动识别@前缀的命名参数,原有执行代码无需修改即可正常运行。
示例DSN格式参考:
sqlserver://账号:密码@实例地址:端口?database=目标库名&namedparameters=true

内容的提问来源于stack exchange,提问作者Nathan DevX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:15:03