suchen

Heim  >  Fragen und Antworten  >  Hauptteil

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

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粉475126941P粉475126941245 Tage vor392

Antworte allen(1)Ich werde antworten

  • P粉022140576

    P粉0221405762024-03-26 10:40:36

    这里有一些问题。首先 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 包含四个元素,但查询返回两列,因此我不太确定您打算如何填充其他两列(或映射是什么)。

    Antwort
    0
  • StornierenAntwort