{"C';附近有不正确的语法."}…错误调试

本文关键字:quot 语法 调试 错误 不正确 | 更新日期: 2023-09-27 17:58:44

SqlConnection conn = new SqlConnection("Server=ILLUMINATI;" + 
    "Database=DB;Integrated Security= true");
SqlCommand comm = new SqlCommand(
    "Insert into FileUpload ('FilePath','TypeId','UploadedBy','UploadedDate') 
    values (" + savePath + "," + typeid + "," + NAME + "," + DateTime.Now+ ")", conn);
conn.Open();
comm.ExecuteNonQuery();
conn.Close();

它给出了一个错误:

{"'C'附近的语法不正确。"}

谁能告诉我这个错误吗。

{"C';附近有不正确的语法."}…错误调试

您必须在值字符串周围加上单个''引号,而不是在列名周围加上引号

试试这个

SqlCommand comm = new SqlCommand(
    "Insert into FileUpload (FilePath,TypeId,UploadedBy,UploadedDate) 
    values ('" + savePath + "','" + typeid + "','" + NAME + "',"

假设typeID是字符串,如果不是,不要将''放在它周围

它给出错误的原因正如Haris所说——你把单引号放错了地方。

然而,通过将引号放在不同的位置来"修复"这一问题是一个非常糟糕的想法。相反,您应该使用参数化查询:

SqlCommand comm = new SqlCommand
    ("Insert into FileUpload (FilePath, TypeId, UploadedBy, UploadedDate)" +
     " values (@savePath, @typeid, @name, @now)", conn);
comm.Parameters.AddWithValue("@savePath", savePath);
comm.Parameters.AddWithValue("@typeid", typeid);
comm.Parameters.AddWithValue("@name", NAME);
comm.Parameters.AddWithValue("@now", DateTime.Now);

通过将数据表示为数据而不是"代码"(SQL(的一部分,您可以避免担心转换(例如日期格式(,从而避免SQL注入攻击。

有关更多详细信息,请参阅SqlCommand.Parameters文档(或搜索"参数化查询"(。

将具有varchar和datetime类型的列括在一个引号中。

SqlCommand comm = new SqlCommand(
    "Insert into FileUpload ('FilePath','TypeId','UploadedBy','UploadedDate') 
    values ('" + savePath + "'," + typeid + ",'" + NAME + "','" + DateTime.Now+ "')", 
    conn);