2017-10-13 5 views
1

Ich versuche Code Refactoring dbContext.Database.ExecuteSqlCommandAsync zu verwenden, statt SqlCommandExec gespeicherte Prozedur mit Ausgabeparameter in Entity Framework Core 2

List<SqlParameter> parameters = new List<SqlParameter>(); 

parameters.Add(new SqlParameter("@certificateTypeId", "TA")); 
parameters.Add(new SqlParameter("@personId", 1m)); 
parameters.Add(new SqlParameter("@selfAssessment", xDocument.ToString())); 
parameters.Add(new SqlParameter("@selfAssessmentVersion", 1m)); 
parameters.Add(new SqlParameter("@sponsorPersonId", 1m)); 

var outputParam = new SqlParameter("@certificationEventId", SqlDbType.Decimal, 10); 
outputParam.Direction = ParameterDirection.Output; 
parameters.Add(outputParam); 

string sql = "[My Stored Proc] " + string.Join(" ", parameters.Select(ToEfString).ToArray()); 

// runtime value: [My Stored Proc] @certificateTypeId @personId @selfAssessment @selfAssessmentVersion @sponsorPersonId @certificationEventId OUT 

var result = await dbContext.Database.ExecuteSqlCommandAsync(sql, parameters); 

return ((SqlDecimal)outputParam.SqlValue).Value; 

ich diesen Fehler:

SqlException: Incorrect syntax near @personId

Was ist los ?

+0

Versuchen Hinzufügen Kommas dazwischen: '[Merk Proc] @certificateTypeId, @personId, @ ...' –

+0

Können Sie die gespeicherte Prozedur angeben Parameternamen explizit im SQL-Aufruf? –

+0

@BernardVanderBeken: Ich bin nicht sicher, was du meinst – Liero

Antwort

3

Sie müssen Kommas zwischen den Parametern hinzuzufügen:

[My Stored Proc] @certificateTypeId, @personId, @... 
Verwandte Themen