System.Data.SqlClient.SqlException:';';附近的语法不正确'';
我尝试用SQL来描述.Net核心Wep API。我在“.”附近找到了不正确的语法 ı使用postman for api并尝试它是否与json一起提供 在appsettings.json代码中System.Data.SqlClient.SqlException:';';附近的语法不正确'';,sql,json,.net,Sql,Json,.net,我尝试用SQL来描述.Net核心Wep API。我在“.”附近找到了不正确的语法 ı使用postman for api并尝试它是否与json一起提供 在appsettings.json代码中 { "ConnectionStrings": { "EmployeeAppCon": "Data Source=.;Initial Catalog=EmployeeDB; Integrated Security=true" },
{
"ConnectionStrings": {
"EmployeeAppCon": "Data Source=.;Initial Catalog=EmployeeDB; Integrated Security=true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
ı尝试了get、post方法,但ı在这里用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;正确的操作更像:
更新数据库部门
set DepartmentName=@name
其中DepartmentId=@id
其中,@name
和@id
是参数
然后使用myCommand.Parameters.Add(…)
包含这两个参数及其名称/值,并使用ExecuteNonQuery
(而不是ExecuteReader
)
然而!让(免费等)为我们做所有艰苦的工作要简单得多,然后我们就可以做:
使用var myCon=new-SqlConnection(sqlDataSource);//甚至不需要打开它
myCon.Execute(@)
更新dbo.Department
set DepartmentName=@name
其中DepartmentId=@id“,
新的{name=dep.DepartmentName,id=dep.DepartmentId});
这里的
新{…}
用值定义我们的命名参数。在查询中使用参数来解决您的问题以及任何注入问题。此外,单词是Update,而不是uptade。部门名称可以包含单引号,并聚合SQL。这也倾向于SQL注入。非常小,但是:newJSONResult(“Uptade Successfull”)
[sic]很奇怪。。。因为:这不是JSON(只需添加:除了连接会导致错误的位之外,它还会导致SQL注入-它还会导致i18n/l10n(特别是日期和数字)出现问题,并且是次优的重新查询计划重新使用;因此:基本上“始终使用参数”: