我尝试一些有关.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": "*" }
谋杀尝试了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是参数。
@name
@id
然后,您将使用myCommand.Parameters.Add(...)包括这两个参数 及其名称/值 ,并使用ExecuteNonQuery(不是ExecuteReader)。
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 {...}此处使用值定义了我们的命名参数。
new {...}