Scanfehler bei Spaltenindex 0, Name „ID': Scan wird nicht unterstützt, Driver.Value vom Typ int64 wird im Typ „*authService.Permission' gespeichert.
P粉475126941
P粉475126941 2024-03-25 21:26:54
0
1
348

Ich erhalte die folgende Fehlermeldung, wenn ich versuche anzurufen err = row.Scan(&resourceList, resourceTypeId)

Scanfehler bei Spaltenindex 0, Name „ID“: Scan wird nicht unterstützt, Driver.Value vom Typ int64 wird gespeichert, um *[]authService.Permission“ einzugeben

type Permission struct {
    ID               int    `json:"id"`
    Name             string `json:"name"`
    Description      string `json:"description"`
    ParentResourceID int    `json:"parentResourceId"`
}

func GetResourcesByResourceTypeId(resourceTypeId string) ([]Permission, string, error) {
db, ctx := db.GetDB()
query := "CALL usp_GetParentResourceListByResourceTypeID(?)"
var resourceList []Permission
stmt, err := db.Prepare(query)
defer stmt.Close()
if err != nil {
    log.Errorln("Error in preparing statement. " + err.Error())
    return nil, "Error in preparing statement.", err
}

row := stmt.QueryRowContext(ctx, resourceTypeId)

err = row.Scan(&resourceList, resourceTypeId)
if err == nil {
    return resourceList, "Resource retrieval.", nil
}

log.Warningln("Resource retrieval failed, ResourceTypeID: " + resourceTypeId + ".")
return resourceList, "Resource retrieval failed.", nil
}

SQL gibt Folgendes zurück

ID  Name
15  Applications
16  Subscriptions
17  Payments

Die gleiche Abfrage funktioniert einwandfrei, wenn ich SQL Server in der query 中使用带有 EXEC-Anweisung versuche.

Irgendeine Idee, was hier falsch ist? Dank im Voraus.

P粉475126941
P粉475126941

Antworte allen(1)
P粉022140576

这里有一些问题。首先 QueryRowContext

您的问题表明您的语句返回多个结果,因此这不是正确使用的函数(QueryContext 会更合适)。

第二个问题如错误中所述:

结果集中的第一列是一个整数(在本例中可能是值 15),并且您正尝试将其扫描到 []Permission 中。如果你改变了 var resourceList []Permission to var resourceList int 该错误将被修复(但第二个参数也需要工作)。

查看此示例文档。获取该代码并将其应用到您的情况将导致类似以下内容(未经测试;只是为了给您指出正确的方向):

rows, err := db.QueryContext(ctx, "CALL usp_GetParentResourceListByResourceTypeID(?)", resourceTypeId)
if err != nil {
    log.Fatal(err)
}
defer rows.Close()

var resourceList []Permission

for rows.Next() {
    var resource Permission
    if err := rows.Scan(&resource.ID, &resource.Name); err != nil {
        // Check for a scan error.
        // Query rows will be closed with defer.
        log.Fatal(err)
    }
    resourceList = append(resourceList, resource )
}

rerr := rows.Close()
if rerr != nil {
    log.Fatal(rerr)
}

if err := rows.Err(); err != nil {
    log.Fatal(err)
}

注意:您的结构 Permission 包含四个元素,但查询返回两列,因此我不太确定您打算如何填充其他两列(或映射是什么)。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!