System.Data.SqlClient.SqlException: 'Cú pháp không chính xác gần'. '.'

Nov 24 2020

Tôi thử một cái gì đó về .Net Core Wep API với SQL. Tôi có cú pháp không chính xác gần '.' '.'

ı sử dụng người đưa thư cho api và thử xem nó có đến hay không với json.

trong mã appsettings.json;

{
  "ConnectionStrings": {
    "EmployeeAppCon": "Data Source=.;Initial Catalog=EmployeeDB; Integrated Security=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

Và tôi đã thử phương thức get, post nhưng tôi gặp lỗi ở đây với phương thức 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");

        }

Tôi bị lỗi ở đâu, xin hãy giúp tôi cảm ơn nhiều?

Trả lời

2 MarcGravell Nov 24 2020 at 08:41

Đây rất có thể là vấn đề với nối trong SQL; câu chuyện ngắn: không bao giờ nối đầu vào vào SQL; các chính xác hoạt động cũng giống như hơn:

update dbo.Department
set DepartmentName=@name
where DepartmentId=@id

ở đâu @name@idlà các tham số.

Sau đó, bạn sẽ sử dụng myCommand.Parameters.Add(...)để bao gồm hai tham số đó và tên / giá trị của chúng , và sử dụng ExecuteNonQuery(not ExecuteReader).

Tuy nhiên! Sẽ đơn giản hơn nhiều nếu để Dapper (miễn phí, v.v.) làm tất cả công việc khó khăn cho chúng ta, sau đó chúng ta có thể làm:

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

trong đó new {...}ở đây xác định các tham số được đặt tên của chúng tôi với các giá trị.