recherche

Maison  >  Questions et réponses  >  le corps du texte

Erreur d'analyse sur l'index de colonne 0, nom 'ID' : analyse non prise en charge, stockage du pilote. Valeur de type int64 pour saisir *authService.Permission"

J'obtiens l'erreur suivante lorsque j'essaie d'appeler err = row.Scan(&resourceList, resourceTypeId)

Erreur d'analyse sur l'index de colonne 0, nom 'ID' : analyse non prise en charge, stockage du pilote.Valeur de type int64 pour saisir *[]authService.Permission"

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 renvoie comme suit

ID  Name
15  Applications
16  Subscriptions
17  Payments

La même requête fonctionne correctement lorsque j'essaie SQL Server dans l'instruction query 中使用带有 EXEC.

Une idée de ce qui ne va pas ici ? Merci d'avance.

P粉475126941P粉475126941245 Il y a quelques jours393

répondre à tous(1)je répondrai

  • P粉022140576

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

    Quelques questions ici. D'abord QueryRowContext

    Votre question indique que votre déclaration renvoie plusieurs résultats, ce n'est donc pas la bonne fonction à utiliser (QueryContext serait plus appropriée).

    Deuxième question comme indiqué dans l'erreur :

    La première colonne de l'ensemble de résultats est un entier (dans ce cas probablement la valeur 15),并且您正尝试将其扫描到 []Permission Si vous modifiez). var resourceList []Permission to var resourceList int Le bug sera corrigé (mais le deuxième paramètre nécessite également du travail).

    Voir cet exemplela documentation. Prendre ce code et l'appliquer à votre situation donnera quelque chose comme ce qui suit (non testé ; juste pour vous orienter dans la bonne direction) :

    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)
    }

    Remarque : Votre structure Permission contient quatre éléments, mais la requête renvoie deux colonnes, donc je ne sais pas trop comment vous comptez remplir les deux autres colonnes (ni quel est le mappage).

    répondre
    0
  • Annulerrépondre