Comment écrivez-vous un paramétrée où-dans les premières requêtes sql dans le Cadre de l'Entité
Comment écrivez-vous un paramétrée où-dans les premières requêtes sql dans le Cadre de l'Entité? J'ai essayé ce qui suit:
string dateQueryString = String.Join(",", chartModelData.GetFormattedDateList());
//Dates returned in format of 20140402,20140506,20140704
const string selectQuery = @"SELECT MAX(DATA_SEQ) AS MaxSeq, MIN(DATA_SEQ) AS MinSeq, COUNT(1) AS TotSampleCnt
FROM SPCDATA_TB
WHERE DATA_WDATE IN @DateParam
AND LINE_CODE = @LineCode
AND MODEL_NO = @ModelNumber
AND LOT_NO = @LotNumber
AND EQUIP_NO LIKE @EquipNumber";
SPCDataSeqCntInfo dataSeqCntInfo = _dbContext.Database.SqlQuery<SPCDataSeqCntInfo>(selectQuery,
new SqlParameter("@DateParam", dateQueryString),
new SqlParameter("@LineCode", chartModelData.LineCode),
new SqlParameter("@ModelNumber", chartModelData.ModelNum),
new SqlParameter("@EquipNumber", equipmentNumber),
new SqlParameter("@LotNumber", chartModelData.LotNum))
.SingleOrDefault() ?? new SPCDataSeqCntInfo();
Mais comme prévu, il déclenche une erreur sur DateParam parce qu'il s'attend à une valeur unique.
@DateParam
doit être une chaîne séparée par des virgules représentant les dates que vous désirez rechercher dans le jeu, il doit également être délimités par des parenthèses.OriginalL'auteur l46kok | 2014-08-26
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas un problème spécifique à l'entité cadre, vous pouvez le résoudre par la production de vos propres noms de paramètre dynamique.
La requête envoyée à SQL-Server ressemblera à celui-ci:
En général, vous voulez éviter de faire de la manipulation de la chaîne lors de l'écriture de requêtes, cependant, je crois que cet exemple est à l'abri d'injection sql.
in clause
OriginalL'auteur Matthew
Voici comment vous pouvez écrire votre requête dans SQL.
Donc on ne doit pas s'attendre à autre chose que d'avoir à représenter cette chaîne entièrement délimitée par des parenthèses.
Ensuite, ne reste plus qu'à l'emballer dans la parenthèse.
Fournir les valeurs de ces paramètres pour chaque paramètre nommé, et voilà! Ce ne le faire!
OriginalL'auteur Will Marcouiller
Allais-je écrire une procédure stockée à la place qui accepte de vos paramètres, puis ajouter le proc à votre edmx.
Puis, dans l'edmx -> Modèle de Navigateur -> les Importations de Fonction -> ... changer le type de retour de la procédure stockée à SPCDataSeqCntInfo.
Entity framework se charge ensuite de transmettre dans vos paramètres.
par exemple
Jetez un oeil à l'aide de _dbContext.La base de données.ExecuteSqlCommand à la place.
OriginalL'auteur Scotty