System.Data.SqlClient.SqlException: 'Yanlış sözdizimi yakın'. '.'

Nov 24 2020

SQL ile .Net Core Wep API ile ilgili bir şeyler yapmaya çalışıyorum. "." 'Yakınında yanlış sözdizimi aldım.'

api için postacı kullanıyorum ve json ile gelip gelmediğini deniyorum.

appsettings.json kodunda;

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

Ve get, post yöntemini denedim ama burada Uptade yöntemiyle bir hata aldım;

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

        }

Benim hatam nerede lütfen çok teşekkürler bana yardım et?

Yanıtlar

2 MarcGravell Nov 24 2020 at 08:41

Bu büyük olasılıkla SQL'de birleştirme ile ilgili bir sorundur; uzun lafın kısası: girdiyi asla SQL'e birleştirmeyin; Doğru operasyon daha gibidir:

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

nerede @nameve nerede @idparametreler.

Daha sonra myCommand.Parameters.Add(...)bu iki parametreyi ve adlarını / değerlerini dahil etmek ve ExecuteNonQuery(değil ExecuteReader) kullanmak için kullanırsınız .

Ancak! Bizim için tüm zor işleri yapmak için Dapper'ı (ücretsiz vb.) Almak çok daha kolay olurdu , o zaman yapabiliriz:

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

burada, new {...}adlandırılmış parametrelerimizi değerlerle tanımlar.