System.Data.SqlClient.SqlException: 'Sintaks salah dekat'. '.'

Nov 24 2020

Saya mencoba sesuatu tentang .Net Core Wep API dengan SQL. Saya mendapat sintaks yang salah di dekat '.' '.'

Saya menggunakan tukang pos untuk api dan mencoba apakah itu datang atau tidak dengan json.

dalam kode appsettings.json;

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

Dan saya mencoba mendapatkan, metode posting tetapi saya mendapat kesalahan di sini dengan metode 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");

        }

Dimana kesalahan saya tolong bantu saya terima kasih banyak?

Jawaban

2 MarcGravell Nov 24 2020 at 08:41

Ini kemungkinan besar masalah dengan penggabungan di SQL; Singkat cerita: tidak pernah menggabungkan input ke dalam SQL; yang benar operasi lebih seperti:

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

dimana @namedan @idadalah parameter.

Kemudian Anda akan menggunakan myCommand.Parameters.Add(...)untuk memasukkan dua parameter tersebut dan nama / nilainya , dan gunakan ExecuteNonQuery(bukan ExecuteReader).

Namun! Akan jauh lebih mudah untuk mendapatkan Dapper (gratis dll) untuk melakukan semua kerja keras untuk kita, maka kita bisa melakukan:

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

di mana di new {...}sini mendefinisikan parameter bernama kami dengan nilai.