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'附近的语法不正确。”}
请有人告诉我错误。
答案 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);