System.Data.SqlClient.SqlException: "Sintassi non corretta vicino a". "."
Provo a fare qualcosa su .Net Core Wep API con SQL. Ho ottenuto la sintassi errata vicino a "." "."
Uso Postman per API e prova se è arrivato o meno con JSON.
nel codice appsettings.json;
{
"ConnectionStrings": {
"EmployeeAppCon": "Data Source=.;Initial Catalog=EmployeeDB; Integrated Security=true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
E ho provato il metodo get, post ma ho ricevuto un errore qui con il metodo Uptade;
[HttpPut]
public JsonResult Put(Department dep)
{
string query = @"
Uptade dbo.Department set
DepartmentName='"+dep.DepartmentName+@"'
where DepartmentId="+dep.DepartmentId+@"
";
DataTable table = new DataTable();
string sqlDataSource = _configuration.GetConnectionString("EmployeeAppCon");
SqlDataReader myReader;
using (SqlConnection myCon = new SqlConnection(sqlDataSource))
{
myCon.Open();
using (SqlCommand myCommand = new SqlCommand(query, myCon))
{
myReader = myCommand.ExecuteReader();
table.Load(myReader); ;
myReader.Close();
myCon.Close();
}
}
return new JsonResult("Uptade Successfull");
}
Dov'è la mia colpa per favore aiutami grazie mille?
Risposte
Questo è molto probabilmente un problema con la concatenazione in SQL; Per farla breve: mai e poi mai concatenare l'input in SQL; l' operazione corretta è più simile a:
update dbo.Department
set DepartmentName=@name
where DepartmentId=@id
dove @namee @idsono parametri.
Quindi useresti myCommand.Parameters.Add(...)per includere quei due parametri e i loro nomi / valori e usare ExecuteNonQuery(not ExecuteReader).
Però! Sarebbe molto più semplice far fare a Dapper (gratuito, ecc.) Tutto il lavoro duro per noi, quindi possiamo semplicemente fare:
using var myCon = new SqlConnection(sqlDataSource); // don't even need to open it
myCon.Execute(@"
update dbo.Department
set DepartmentName=@name
where DepartmentId=@id",
new { name = dep.DepartmentName, id = dep.DepartmentId });
dove new {...}qui definisce i nostri parametri denominati con valori.