{“'C'附近的语法不正确。”} .....错误调试

时间:2011-06-07 05:57:46

标签: c# asp.net sql-server insert

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'附近的语法不正确。”}

请有人告诉我错误。

3 个答案:

答案 0 :(得分:5)

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

试试这个

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

假设typeID是字符串,如果不是''则不在其中

答案 1 :(得分:5)

它给出错误的原因是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文档(或搜索“参数化查询”)。

答案 2 :(得分:1)

将具有varchar和datetime类型的列包含在单引号中。

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