我正在尝试执行插入查询,并且一直收到错误:
附近的语法不正确
'/'
以下是我插入" /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");
答案 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,请解释。