sql - System.Data.SqlClient.SqlException:''.' 附近的语法不正确。'
问题描述
我尝试使用 SQL 来了解 .Net Core Wep API。我在'.''附近得到了不正确的语法。'
我使用邮递员作为 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": "*"
}
我尝试了 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 中;正确的操作更像是:
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 {...}
用值定义了我们的命名参数。
推荐阅读
- regex - 使用 xml 中的正则表达式忽略换行符
- ios - 移动视图时安全区域插图消失
- css - 验证器给出 2 个解析错误
- reactjs - this.setState() 不会使用特定对象执行
- excel - DAO.TableDef 未在 Excel 中定义
- react-native - 如何在 React Native Elements 中将 SearchBar 居中
- getopt - 如何在 cshell 脚本中正确使用 getopt?
- google-cloud-platform - 如何解释具有空分数的 Web 实体?
- c# - 解析返回的 JSON
- azure - Map yarn build output to stage an artifact