2012-10-02 112 views
-4

可能重复:
C# stored procedure with parameters调用存储过程有多个参数

我试图调用从C#传递多个参数的存储过程,并不能得到它的工作。这是我到目前为止。

cmd = new SqlCommand(); 
cmd = dbConn.CreateCommand(); 
cmd.CommandText = "inserttoTable @size = " + size + ", @brand = " + brand + ", @manu = " + manu + ", @t= " + id.ToString(); 
cmd.ExecuteNonQuery(); 

大小,品牌和手工都是字符串。 inserttoTable是存储过程。

我收到以下错误:System.Data.SqlClient.SqlException: Incorrect syntax near the keyword 'TO'.

+2

一方面,如果他们是字符串,你需要撇号surroud他们,但这个原因当变量有撇号时出现问题。您最好使用参数化查询,如上面我的评论中所示。 – LittleBobbyTables

+1

这是可以SQL SQL注入攻击。请重新考虑使用参数化查询。 –

+0

对我来说看起来不像一个人。类似的,是的,确切的重复,不。 –

回答

0

虽然这不是调用存储过程,如果你的字符串参数周围添加单引号的最佳方法,你应该没问题。

cmd = new SqlCommand(); 
cmd = dbConn.CreateCommand(); 
cmd.CommandText = "inserttoTable @size = '" + size + "', @brand = '" + brand + "', @manu = '" + manu + "', @t= '" + id.ToString() + "'"; 
cmd.ExecuteNonQuery(); 

此代码已过时并已在10年前弃用。

+0

那么为什么这个投票结果完全不准确? – NicVerAZ

+0

我没有足够的声望投票下来,所以我没有做到这一点 – Nitrodbz

2

,如果你使用的参数和更改命令类型的存储过程您将有较少的问题:

cmd = new SqlCommand(); 
cmd = dbConn.CreateCommand(); 
cmd.CommandText = "inserttoTable"; 
cmd.CommandType = System.Data.CommandType.StoredProcedure; 

cmd.Parameters.Add(new SqlParameter("@size", size)); 
cmd.Parameters.Add(new SqlParameter("@brand", brand)); 
cmd.Parameters.Add(new SqlParameter("@manu", manu)); 
cmd.Parameters.Add(new SqlParameter("@t", id.ToString())); 

cmd.ExecuteNonQuery(); 
相关问题