System.Data.SqlClient.SqlException: ''。 '。'の近くの構文が正しくありません
Nov 24 2020
SQLを使用した.NetCore WepAPIについて何かしようとしています。'' '。'の近くに間違った構文があります。
ıapiにpostmanを使用し、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");
}
私のせいはどこにありますか?
回答
2 MarcGravell Nov 24 2020 at 08:41
これは、SQLの連結に関する問題である可能性が最も高いです。簡単に言うと、SQLへの入力を連結することは決してありません。正しい動作をよりのようなものです:
update dbo.Department
set DepartmentName=@name
where DepartmentId=@id
ここで@name
、@id
はパラメータです。
次にmyCommand.Parameters.Add(...)
、これら2つのパラメーターとその名前/値を含めるために使用し、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 {...}
ここでは名前付きパラメーターを値で定義しています。