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(не 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 {...}здесь определены наши именованные параметры со значениями.