System.Data.SqlClient.SqlException: 'Falsche Syntax in der Nähe von'. '.'
Ich versuche etwas über .Net Core Wep API mit SQL. Ich habe die falsche Syntax in der Nähe von '.' '.'
ı benutze postman für api und versuche ob es mit json kam oder nicht.
in appsettings.json Code;
{
"ConnectionStrings": {
"EmployeeAppCon": "Data Source=.;Initial Catalog=EmployeeDB; Integrated Security=true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Und ich habe versucht, get, post method, aber ich habe hier einen Fehler mit der Uptade-Methode bekommen;
[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");
}
Wo ist meine Schuld, bitte helfen Sie mir, vielen Dank?
Antworten
Dies ist höchstwahrscheinlich ein Problem mit der Verkettung in SQL. Lange Rede, kurzer Sinn : Verketten Sie niemals Eingaben in SQL. Die richtige Operation ist eher wie folgt:
update dbo.Department
set DepartmentName=@name
where DepartmentId=@id
wo @name
und @id
sind Parameter.
Dann würden Sie myCommand.Parameters.Add(...)
diese beiden Parameter und ihre Namen / Werte einschließen und ExecuteNonQuery
(nicht ExecuteReader
) verwenden.
Jedoch! Es wäre viel einfacher, Dapper (kostenlos usw.) dazu zu bringen, die ganze harte Arbeit für uns zu erledigen, dann können wir einfach Folgendes tun:
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 });
wobei das new {...}
hier unsere benannten Parameter mit Werten definiert.