public List<JC_PHASE_MASTER_TOTAL1_MC> GetAllByCompanyCodeJobNumber()
{
return _context.JC_PHASE_MASTER_TOTAL1_MC.FromSql(
$"SELECT * FROM JC_PHASE_MASTER_TOTAL1_MC WHERE (Job_Number = ' 123')"
).ToList();
}
Corresponding SQL:
SELECT *
FROM JC_PHASE_MASTER_TOTAL1_MC
WHERE
(Job_Number = ' 123')
Il campo Job_Number nella tabella è un varchar ed è memorizzato con spazi iniziali per qualsiasi cifra non utilizzata. Quando eseguo la funzione sopra con Job_Number hardcoded, la query viene eseguita come previsto. Tuttavia, l'SQL prodotto passando lo stesso valore di un parametro è simile al seguente e l'esecuzione SQL sembra passare un numero anziché una stringa:
public List<JC_PHASE_MASTER_TOTAL1_MC> GetAllByCompanyCodeJobNumber(string jobNumber)
{
return _context.JC_PHASE_MASTER_TOTAL1_MC.FromSql(
$"SELECT * FROM JC_PHASE_MASTER_TOTAL1_MC WHERE (Job_Number = {jobNumber})"
).ToList();
}
Corresponding SQL with ' 123' passed to the jobNumber string parameter:
SELECT *
FROM JC_PHASE_MASTER_TOTAL1_MC
WHERE
(Job_Number = 123)
Perché il parametro string viene passato nell'istruzione SQL come 123 e non "123"? Non sono sicuro di come regolare la mia funzione in modo che il parametro non venga passato come numero.
Codice rivisto per soluzione accettata:
public List<JC_PHASE_MASTER_TOTAL1_MC>GetAllByCompanyCodeJobNumber(string jobNumber)
{
var jobNumberParameter = new SqlParameter("@jobNumber", SqlDbType.VarChar);
jobNumberParameter.Value = jobNumber;
return _context.JC_PHASE_MASTER_TOTAL1_MC.FromSql(
$"SELECT * FROM JC_PHASE_MASTER_TOTAL1_MC WHERE (Job_Number = {jobNumberParameter})"
).ToList();
}
Hai provato a impostare esplicitamente il tipo di dati SQL, qualcosa del tipo:
public List<JC_PHASE_MASTER_TOTAL1_MC>GetAllByCompanyCodeJobNumber(string jobNumber)
{
var jobNumberParameter = new SqlParameter("@jobNumber", SqlDbType.VarChar);
jobNumberParameter.Value = jobNumber;
return _context.JC_PHASE_MASTER_TOTAL1_MC.FromSql(
$"SELECT * FROM JC_PHASE_MASTER_TOTAL1_MC WHERE (Job_Number = {jobNumberParameter})"
).ToList();
}