插入数据时,“/”附近的语法不正确

时间:2014-05-05 14:59:11

标签: c# sql sql-server

我正在尝试执行插入查询,并且一直收到错误:

  

'/'

附近的语法不正确

以下是我插入" /Portals/0/products/HT3-XXX.pdf "

的内容

为什么我不能插入'/'

我需要转换为字符串吗?或者什么?

//Inserts 3DModel
SqlConnection sqlCon2 = new SqlConnection("...");
SqlCommand sqlCmd2 = new SqlCommand();
sqlCmd2.CommandText = "INSERT INTO [Products].[Files] ([TypeID] ,[ProductID] ,[URL]) VALUES ('3', " + textBox15.Text + ", " + textBox4.Text + ") ";
sqlCmd2.Connection = sqlCon2;

sqlCon2.Open();
sqlCmd2.ExecuteNonQuery().ToString();
sqlCon2.Close();
MessageBox.Show("3DModel for " + textBox3.Text + "' Has been Added");

4 个答案:

答案 0 :(得分:6)

最有可能的是,它正在抱怨您用作参数的网址。

sqlCmd2.CommandText = "INSERT INTO [Products].[Files] ([TypeID] ,[ProductID] ,[URL]) VALUES ('3', " + textBox15.Text + ", " + textBox4.Text + ") ";
sqlCmd2.Connection = sqlCon2;

参数化您的查询并查看它是否解决了问题:

sqlCmd2.CommandText = "INSERT INTO [Products].[Files] ([TypeID] ,[ProductID] ,[URL]) VALUES (@TypeId, @ProductId, @Url) ";
sqlCmd2.Parameters.AddWithValue("@TypeId", 3);
sqlCmd2.Parameters.AddWithValue("@ProductId", textBox15.Text);
sqlCmd2.Parameters.AddWithValue("@Url", textBox4.Text);
sqlCmd2.Connection = sqlCon2;

答案 1 :(得分:2)

问题是因为您在连接查询中的值周围缺少单引号。但是您的查询很容易SQL Injection。使用SqlParameter

sqlCmd2.CommandText = "INSERT INTO [Products].[Files] ([TypeID] ,[ProductID] ,[URL]) VALUES ('3', @ProductID, @URL)";
sqlCmd2.Parameters.AddWithValue("@ProductID", textBox15.Text);
sqlCmd2.Parameters.AddWithValue("@URL", textBox4.Text);

考虑将using语句与Connection和Command对象一起使用以释放资源。

答案 2 :(得分:1)

您必须将值包装在SQL的引号中,以了解它是一个字符串:

 sqlCmd2.CommandText = "INSERT INTO [Products].[Files] ([TypeID] ,[ProductID] ,[URL]) VALUES ('3', " + textBox15.Text + ", '" + textBox4.Text + "') ";

但是,此代码 易受SQL injection攻击。我强烈建议您使用预先准备好的声明:

 sqlCmd2.CommandText = "INSERT INTO [Products].[Files] ([TypeID] ,[ProductID] ,[URL]) VALUES ('3', @productID, @url) ";
 sqlCmd2.Parameters.AddWithValue("@productID", textBox15.Text);
 sqlCmd2.Parameters.AddWithValue("@url", textBox4.Text);

答案 3 :(得分:-1)

您目前正在使用文本字段的原始内容。这是一个非常糟糕的主意,因为首先你不能创建任何可能终止SQL语句的字符。其次,由于这个原因,任何人都可以编写一个删除整个数据库的查询。

现在,为了回答您的问题,您在文本框周围缺少引号。 目前它可以说:

(' 3',Textbox5ContentHere,Textbox4ContentHere)

何时需要

(' 3',' Textbox5ContentHere',' Textbox4ContentHere')

<编辑@Edit:Downvoters,请解释。