过程 'Proc_UserAnswer' 需要参数 '@UserID',但未提供该参数
gdjlc 2008-05-18 10:39:08 最近在做考试系统时碰到这个问题了,好郁闷,弄了好久也没解决,请大家帮我看一下,不胜感激!
错误提示信息如下:
过程 'Proc_UserAnswer' 需要参数 '@UserID',但未提供该参数。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.SqlClient.SqlException: 过程 'Proc_UserAnswer' 需要参数 '@UserID',但未提供该参数。
源错误:
行 299: SqlDataAdapter adapter = new SqlDataAdapter(Cmd);
行 300: DataSet dataset = new DataSet();
行 301: adapter.Fill(dataset);行
302: Close();
行 303: return dataset;
----------------------------------------------------------------
表UserAnswer:
ID int
UserID varchar
PaperID int
Type varchar
TitleID int
Mark int
UserAnswer varchar
ExamTime datetime
-----------------------------------------
这是存储过程
CREATE PROCEDURE [dbo].[Proc_UserAnswer]
@PaperID [int],
@Type [varchar](10),
@UserID [varchar](50)
AS
begin
declare @sql nvarchar(1000)
if @Type='单选题'
begin
set @sql='select * from UserAnswer,SingleProblem
where [Type]=''单选题'' and
UserAnswer.TitleID=SingleProblem.ID and
[PaperID]= +Cast(@PaperID AS varchar(10) and
UserID=@UserID'
exec sp_executesql @sql
end
else if @Type='多选题'
begin
set @sql='select * from UserAnswer,MultiProblem
where [Type]=''多选题'' and
UserAnswer.TitleID=MultiProblem.ID and
[PaperID]= +Cast(@PaperID AS varchar(10) and
UserID=@UserID'
exec sp_executesql @sql
end
else if @Type='判断题'
begin
set @sql='select * from UserAnswer,JudgeProblem
where ( [Type]=''判断题'' and
UserAnswer.TitleID=JudgeProblem.ID and
[PaperID]= +Cast(@PaperID AS varchar(10) and
UserID=@UserID)'
exec sp_executesql @sql
end
else if @Type='填空题'
begin
set @sql='select * from UserAnswer,FillBlankProblem
where ( [Type]=''填空题'' and
UserAnswer.TitleID=FillBlankProblem.ID and
[PaperID]= +Cast(@PaperID AS varchar(10) and
UserID=@UserID)'
exec sp_executesql @sql
end
else if @Type='问答题'
begin
set @sql='select * from UserAnswer,QuestionProblem
where ( [Type]=''问答题'' and
UserAnswer.TitleID=QuestionProblem.ID and
[PaperID]= +Cast(@PaperID AS varchar(10) and
UserID=@UserID)'
exec sp_executesql @sql
end
end
GO
-------------------------------------------------
类文件Paper.cs:
//查询某个用户考试的试卷,
public DataSet QueryUserPaper(int paperid,string type,string userid)
{
DataBase DB = new DataBase();
SqlParameter[] Params = new SqlParameter[3];
Params[0] = DB.MakeInParam("@PaperID", SqlDbType.Int, 4, paperid); //试卷编号
Params[1] = DB.MakeInParam("@Type", SqlDbType.VarChar, 10, type); //题目类型
Params[2] = DB.MakeInParam("@UserID", SqlDbType.VarChar, 50, userid); //用户ID
return DB.GetDataSet("Proc_UserAnswer", Params);
}
------------------------------------
DataBase.cs文件:
public DataSet GetDataSet(string ProcName, SqlParameter[] Params)
{
Open();
SqlCommand Cmd = CreateCommand(ProcName, Params);
SqlDataAdapter adapter = new SqlDataAdapter(Cmd);
DataSet dataset = new DataSet();
adapter.Fill(dataset);
Close();
return dataset;
}
---------------------------------------
查看某个用户的试卷回答,UserPaper.aspx.cs:
DataBase DB = new DataBase();
DataSet ds = DB.GetDataSetSql("select * from [UserAnswer] where PaperID='" + Request.QueryString["PaperID"] + "'");
DataRow[] row = ds.Tables[0].Select();
foreach (DataRow rs in row)
{
userid = rs["UserID"].ToString();
examtime = Convert.ToDateTime(rs["ExamTime"].ToString());
}
int paperID = Convert.ToInt32(Request.QueryString["PaperID"].ToString());
Paper paper =new Paper();
DataSet ds1 = paper.QueryUserPaper(paperID, "单选题", userid);
GridView1.DataSource = ds1;
GridView1.DataBind();
((Label)GridView1.HeaderRow.FindControl("Label27")).Text = ((Label)GridView1.Rows[0].FindControl("Label4")).Text;
DataSet ds2 = paper.QueryUserPaper(paperID, "多选题", userid);
GridView2.DataSource = ds2;
GridView2.DataBind();
((Label)GridView2.HeaderRow.FindControl("Label28")).Text = ((Label)GridView2.Rows[0].FindControl("Label8")).Text;