我需要幫助理解這個錯誤。該代碼適用于 sqlite??雌饋?sql 包甚至沒有在那里放置值,而是按原樣發送問號。我可以毫無問題地運行其他選擇語句,因此這不是連接問題或類似問題。錯誤:“?”附近的語法不正確func TestSQLServerInsert(t *testing.T) { db, err := sql.Open("sqlserver", "my_trusted_string") //db, err := sql.Open("sqlite3", "../data/utm_info.db") if err != nil { t.Errorf("could not open database: %v", err) } defer db.Close() c := controller.NewC(db) u := controller.UtilizationResponse{ Snapshot: []int{46, 22, 4, 4, 5, 3, 0, 8, 49}, History: []float32{55.1, 47.2, 0.3, 33.4, 23.5}, Time: time.Now(), } affectedRows, err := c.InsertUtil(u) if err != nil { t.Errorf("could not insert into db: %v", err) } var count int64 = 1 assert.Equal(t, affectedRows, count)}// InsertUtil response inserts a new record into the databasefunc (c *Controller) InsertUtil(u UtilizationResponse) (rowsAffected int64, err error) { return insertUtil(c.DB, u)}func insertUtil(db *sql.DB, u UtilizationResponse) (int64, error) { stmt, err := db.Prepare("INSERT INTO Utilization VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)") if err != nil { return 0, err } res, err := stmt.Exec( u.Time, u.Snapshot[0], u.Snapshot[1], u.Snapshot[2], u.Snapshot[3], u.Snapshot[4], u.Snapshot[5], u.Snapshot[6], u.Snapshot[7], u.Snapshot[8], u.History[0], u.History[1], u.History[2], u.History[3], u.History[4], ) if err != nil { return 0, err } rowCnt, err := res.RowsAffected() if err != nil { return 0, err } return rowCnt, nil}type UtilizationResponse struct { Snapshot []int `json:"snapshot,omitempty"` History []float32 `json:"history,omitempty"` Time time.Time `json:"time,omitempty"`}
1 回答

一只名叫tom的貓
TA貢獻1906條經驗 獲得超3個贊
sqlserver驅動程序使用正常的 MS SQL Server 語法,并期望 sql 查詢中的參數采用 @Name 或 @p1 到 @pN(序數位置)的形式。
insertSql?:=?"insert?into?test?(id,?idstr)?values?(@p1,?@p2)"
經過一些測試,我可以確認它有效。它甚至可以與 sqlite3 一起使用,因此這似乎是一種更廣泛接受的方式。
- 1 回答
- 0 關注
- 161 瀏覽
添加回答
舉報
0/150
提交
取消