System.Data.SqlClient.SqlException: 'ไวยากรณ์ไม่ถูกต้องใกล้'. '
ฉันพยายามทำบางอย่างเกี่ยวกับ. Net Core Wep API กับ SQL ฉันได้รับไวยากรณ์ที่ไม่ถูกต้องใกล้กับ "." "
ฉันใช้บุรุษไปรษณีย์สำหรับ api และลองว่ามันมาหรือไม่กับ json
ในรหัส appsettings.json;
{
"ConnectionStrings": {
"EmployeeAppCon": "Data Source=.;Initial Catalog=EmployeeDB; Integrated Security=true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
และฉันพยายามรับวิธีการโพสต์ แต่ฉันได้รับข้อผิดพลาดที่นี่ด้วยวิธี 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");
}
ความผิดของฉันอยู่ที่ไหนโปรดช่วยฉันด้วยขอบคุณมาก?
คำตอบ
ซึ่งน่าจะเป็นปัญหาเกี่ยวกับการเชื่อมต่อใน SQL เรื่องสั้นสั้น: ไม่เคยเชื่อมต่ออินพุตเข้ากับ SQL; การดำเนินการที่ถูกต้องเป็นเช่น:
update dbo.Department
set DepartmentName=@name
where DepartmentId=@id
ที่ไหน@nameและ@idเป็นพารามิเตอร์
จากนั้นคุณจะใช้myCommand.Parameters.Add(...)เพื่อรวมทั้งสองพารามิเตอร์และชื่อ / ค่าและใช้ExecuteNonQuery(not ExecuteReader)
อย่างไรก็ตาม! มันจะง่ายกว่ามากถ้าจะให้Dapper (ฟรีและอื่น ๆ ) ทำงานหนักทั้งหมดให้เราแล้วเราก็ทำได้:
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 });
โดยที่new {...}นี่กำหนดพารามิเตอร์ที่มีชื่อของเราด้วยค่า