Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System.Data.SqlClient.SqlException:';';附近的语法不正确'';_Sql_Json_.net - Fatal编程技术网

System.Data.SqlClient.SqlException:';';附近的语法不正确'';

System.Data.SqlClient.SqlException:';';附近的语法不正确'';,sql,json,.net,Sql,Json,.net,我尝试用SQL来描述.Net核心Wep API。我在“.”附近找到了不正确的语法 ı使用postman for api并尝试它是否与json一起提供 在appsettings.json代码中 { "ConnectionStrings": { "EmployeeAppCon": "Data Source=.;Initial Catalog=EmployeeDB; Integrated Security=true" },

我尝试用SQL来描述.Net核心Wep API。我在“.”附近找到了不正确的语法

ı使用postman for 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");

        }

我的错在哪里?请帮助我,非常感谢?

这很可能是SQL中的串联问题;长话短说:永远不要将输入连接到SQL;正确的操作更像:

更新数据库部门
set DepartmentName=@name
其中DepartmentId=@id
其中,
@name
@id
是参数

然后使用
myCommand.Parameters.Add(…)
包含这两个参数及其名称/值,并使用
ExecuteNonQuery
(而不是
ExecuteReader

然而!让(免费等)为我们做所有艰苦的工作要简单得多,然后我们就可以做:

使用var myCon=new-SqlConnection(sqlDataSource);//甚至不需要打开它
myCon.Execute(@)
更新dbo.Department
set DepartmentName=@name
其中DepartmentId=@id“,
新的{name=dep.DepartmentName,id=dep.DepartmentId});

这里的
新{…}
用值定义我们的命名参数。

在查询中使用参数来解决您的问题以及任何注入问题。此外,单词是Update,而不是uptade。部门名称可以包含单引号,并聚合SQL。这也倾向于SQL注入。非常小,但是:
newJSONResult(“Uptade Successfull”)
[sic]很奇怪。。。因为:这不是JSON(只需添加:除了连接会导致错误的位之外,它还会导致SQL注入-它还会导致i18n/l10n(特别是日期和数字)出现问题,并且是次优的重新查询计划重新使用;因此:基本上“始终使用参数”: