我试图从我的sql服务器数据库中通过ID获取特定项目。这里是我的代码:用golang和sqlserver驱动程序查询参数
var(
allArticlesQry string = "SELECT * FROM Articles"
findArticlesQry string = "SELECT * FROM Articles WHERE Id = ?1"
)
func FindArticle(w http.ResponseWriter, r *http.Request){
vars := mux.Vars(r)
var id = vars["id"]
var article Article
db := connect()
defer db.Close()
stmt, err := db.Prepare(findArticlesQry)
if err != nil{
log.Fatal(err)
}
defer stmt.Close()
err = stmt.QueryRow(id).Scan(&article.Title, &article.Description, &article.Body, &article.Id)
if err != nil{
log.Fatal(err)
}
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(u.HttpResp{Status: 200, Body: article})
}
我使用this package的SQLSERVER驱动器,它有这个例子中谁应该很好地工作:db.Query("SELECT * FROM t WHERE a = ?3, b = ?2, c = ?1", "x", "y", "z")
但每次我尝试调用此函数失败并返回: 2017/09/01 16:31:01 mssql: Incorrect syntax near '?'.
所以,我真的不明白,为什么我的查询不工作..
编辑
我尝试另一种方式,我删除,我在执行前准备查询的一部分,现在它不会崩溃我的服务器,我有一个回应,但问题仍然是相同的:
var row = db.QueryRow(findArticlesQry, id).Scan(&article.Title, &article.Description, &article.Body, &article.Id)
而且回应:
{
"status": 200,
"description": "",
"body": {
"Number": 102,
"State": 1,
"Class": 15,
"Message": "Incorrect syntax near '?'.",
"ServerName": "DESKTOP-DLROBC4\\LOCALHOST",
"ProcName": "",
"LineNo": 1
}
}
你确定你是使用'mssql'驱动程序而不是'sqlserver'?两者都在该软件包中,但后者期望以不同格式的参数。 –
我正在使用sqlserver驱动程序,我现在不在我的计算机上,所以我会在几个小时内尝试。 –