使用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
相关产品推荐
相关产品推荐

