2012-02-07 77 views
0

我想做的事是当用户点击该链接,则点击次数会增加1,但我没能做到=(找不到存储在更新过程

输出

找不到存储过程 'updateMovieClicks'How以共享胜出?', '64'

我的存储过程

ALTER PROCEDURE updateMovieClicks 
(
@movieTitle varchar(50), 
@movieClicks int 
) 
AS 
update MovieListTable set [email protected] where [email protected]; 

我在页面加载

conn.Open(); 
SqlCommand cmdIncreaseMovieClicks = new SqlCommand("updateMovieClicks'" + 
    Session["videoName"].ToString() + "','" + clicksIncrease + "'", conn); 
SqlParameter movieTitle = new SqlParameter(); 
SqlParameter movieClicks = new SqlParameter(); 
cmdIncreaseMovieClicks.CommandType = CommandType.StoredProcedure; 
cmdIncreaseMovieClicks.Parameters.Add("@movieClick", SqlDbType.Int).Value 
= clicksIncrease+1; 
cmdIncreaseMovieClicks.ExecuteNonQuery(); 
conn.Close(); 
+0

您尚未设置参数。 – 2012-02-07 23:59:37

回答

2

你的错误是ocurring因为系统会认为你正在努力寻找所谓'updateMovieClicks'How to win in share?','64'的存储过程。这是因为您已将串中的参数串联到存储过程名称。


当指定命令是StoredProcedure类型,那么你seperately添加参数的命令文本。因此只有存储过程名称才会出现在命令文本中,并且参数将作为单独对象添加到SqlCommand中。

ALTER PROCEDURE updateMovieClicks 
(
@movieTitle varchar(50) 
) 
AS 
update MovieListTable set movieClicks=(movieClicks+1) where [email protected]; 


SqlCommand cmdIncreaseMovieClicks = new SqlCommand("updateMovieClicks", conn); 
cmdIncreaseMovieClicks.CommandType = CommandType.StoredProcedure; 
cmdIncreaseMovieClicks.Parameters.Add("@movieTitle", SqlDbType.nvarchar).Value 
= session["videoName"].tostring(); 
conn.Open(); 
cmdIncreaseMovieClicks.ExecuteNonQuery(); 
conn.Close(); 

使这里movieClicks在SQL水平计算,我也得到了改善你的存储过程的查询。

0

程序代码,您只需要指定你的SqlCommand的构造函数中的存储过程的名称。

var cmd = new SqlCommand("updateMovieClicks",conn); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.AddWithValue("@movieTitle", Session["videoName"].ToString()); 
cmd.Parameters.AddWithValue("@movieClicks", int.Parse(clicksIncrease));