System.Data.SqlClient.SqlException : ''. '근처에 잘못된 구문이 있습니다.'

Nov 24 2020

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");

        }

내 잘못이 어디있어서 고마워요?

답변

2 MarcGravell Nov 24 2020 at 08:41

이것은 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 {...}값으로 명명 된 매개 변수를 정의합니다.