C# SQL查询异常问题

C# SQL查询异常问题,c#,sql,sql-server,visual-studio,C#,Sql,Sql Server,Visual Studio,我试图使用一个包含11个参数作为输入的函数将一条记录插入数据库。功能如下: public int check_in_visitor(int visitor_id,String date_in, String date_out, String time_in, int check_in, int check_out, String employer, String vehicle_number, int manual_entrychk, String time_out) 对应的查

我试图使用一个包含11个参数作为输入的函数将一条记录插入数据库。功能如下:

public int check_in_visitor(int visitor_id,String date_in, String date_out,
    String time_in, int check_in, int check_out, String employer,
    String vehicle_number, int manual_entrychk, String time_out)
对应的查询:

String query = "insert into visitor values('"+visitor_id +"','" +
    date_in + "','" + date_out + "','" + time_in + "'," + check_in +
    ",'" + check_out + "'," + employer + ",'" + vehicle_number + "'," +
    manual_entrychk + ",'" + time_out + "')

它总是给错误,如表达不正确!请帮助我解决您缺少的问题,用双引号关闭查询字符串

String query = "insert into visitor values('"+visitor_id +"','" + date_in + "','" + date_out + "','" + time_in + "'," + check_in + ",'" + check_out + "'," + employer + ",'" + vehicle_number + "'," + manual_entrychk + ",'" + time_out + "')";
注1:所有VARCHAR字段应正确地用单引号括起来

注2:所有INT字段不应使用单引号括起来

String query = "insert into visitor values('"+visitor_id +"','" + date_in + "','" + date_out + "','" + time_in + "'," + check_in + ",'" + check_out + "'," + employer + ",'" + vehicle_number + "'," + manual_entrychk + ",'" + time_out + "')";
注3:您的查询对SQL注入攻击开放。请使用参数化查询

除非您提供feild类型,否则它将无法解决问题。

使用SqlParameter。。 这样,您就可以避免sql注入攻击,即使用“或”或其他问题封装数据

String query = "insert into visitor values(@visitor_id,@date_in,@date_out,@time_in,@check_in,@check_out,@employer,@vehicle_number, @manual_entrychk,@time_out)";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.Add(new SqlParameter("visitor_id", visitor_id));
command.Parameters.Add(new SqlParameter("date_in", date_in));
....
command.ExecuteNonQuery();

使用string.format。类似字符串查询=string.Formatinsert到访问者值“{0}”,“{1}…”,vistor_id。。。;此语法更易于故障排除,并避免了字符串连接。你也应该考虑不要使用在你的查询中不完全信任的数据,比如他的回答中提到的安瑞德,如果这是一个选项。

< P>如果下面的查询对你没有帮助,请告诉我们错误是什么?

string query = "insert into visitor values ("+visitor_id+ ","+ date_in +","+date_out
        +","+time_in+","+check_in+","+check_out+","+employer+","+vehicle_number+","
        +manual_entrychk+","+time_out+")";

数据库中manual_entrychk的数据类型是什么?您是否尝试打印查询并检查其sql语法?int。但是访问者id是bigint。我希望visual studio中的int等同于sql management studio中的bigint???@user3081555 visitor_id将在查询中替换为@visitor_id…这样您就不必担心将其包含在“中”,或者在定义参数后查看教程这是执行插入命令时应该做的事情?command=connection.CreateCommand;command.CommandText=查询;int result=command.ExecuteNonQuery@user3081555您需要在查询中的所有参数前面加上@..,然后对每个此类参数执行commad.parameters.Addparametername,parameterValue;在那之后,我提到的上面几行??command=connection.CreateCommand;command.CommandText=查询;int result=command.ExecuteNonQuery;