System.Data.SqlClient.SqlException: 'Falsche Syntax in der Nähe von'. '.'

Nov 24 2020

Ich versuche etwas über .Net Core Wep API mit SQL. Ich habe die falsche Syntax in der Nähe von '.' '.'

ı benutze postman für api und versuche ob es mit json kam oder nicht.

in appsettings.json Code;

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

Und ich habe versucht, get, post method, aber ich habe hier einen Fehler mit der Uptade-Methode bekommen;

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

        }

Wo ist meine Schuld, bitte helfen Sie mir, vielen Dank?

Antworten

2 MarcGravell Nov 24 2020 at 08:41

Dies ist höchstwahrscheinlich ein Problem mit der Verkettung in SQL. Lange Rede, kurzer Sinn : Verketten Sie niemals Eingaben in SQL. Die richtige Operation ist eher wie folgt:

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

wo @nameund @idsind Parameter.

Dann würden Sie myCommand.Parameters.Add(...)diese beiden Parameter und ihre Namen / Werte einschließen und ExecuteNonQuery(nicht ExecuteReader) verwenden.

Jedoch! Es wäre viel einfacher, Dapper (kostenlos usw.) dazu zu bringen, die ganze harte Arbeit für uns zu erledigen, dann können wir einfach Folgendes tun:

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

wobei das new {...}hier unsere benannten Parameter mit Werten definiert.