过程 '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;
...全文
368 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdjlc 2008-05-18
  • 打赏
  • 举报
回复
2楼和3楼的,"Exec Proc_UserAnswer @PaperID,@Type,@UserID "这句应该加在哪里,我是新手,不太明白.谢谢了..
gdjlc 2008-05-18
  • 打赏
  • 举报
回复
还有,那个DataBase.CS文件还有下面这些代码

public SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)
{
SqlParameter Param;

if(Size > 0)
Param = new SqlParameter(ParamName, DbType, Size);
else Param = new SqlParameter(ParamName, DbType);

Param.Direction = Direction;

if (Value != null)
Param.Value = Value;

return Param;
}

//公有方法,实例化一个用于调用存储过程的输入参数
//输入:
// ParamName - 参数名称
// DbType - 参数类型
// Size - 参数大小
// Value - 值
public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value)
{
return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
}
gdjlc 2008-05-18
  • 打赏
  • 举报
回复
多谢回复,但我用另一个查询试卷的存储过程可以正常得到结果啊
CREATE PROCEDURE [dbo].[Proc_PaperDetail]
(@PaperID [int],
@Type [varchar](10))
AS
begin
declare @sql nvarchar(1000)
if @Type='单选题'
begin
set @sql='select * from PaperDetail,SingleProblem
where [Type]=''单选题'' and
PaperDetail.TitleID=SingleProblem.ID and [PaperID]= '+Cast(@PaperID AS varchar(10))
exec sp_executesql @sql
end
else if @Type='多选题'
begin
set @sql='select * from PaperDetail,MultiProblem
where [Type]=''多选题'' and PaperDetail.TitleID=MultiProblem.ID and
[PaperID]=' + +Cast(@PaperID AS varchar(10))
exec sp_executesql @sql
end
else if @Type='判断题'
begin
set @sql='select * from PaperDetail,JudgeProblem
where [Type]=''判断题'' and PaperDetail.TitleID=JudgeProblem.ID and
[PaperID]=' + +Cast(@PaperID AS varchar(10))
exec sp_executesql @sql
end
else if @Type='问答题'
begin
set @sql='select * from PaperDetail,QuestionProblem
where [Type]=''问答题'' and PaperDetail.TitleID=QuestionProblem.ID and
[PaperID]=' + +Cast(@PaperID AS varchar(10))
exec sp_executesql @sql
end
else
begin
set @sql='select * from PaperDetail,FillBlankProblem
where [Type]=''填空题'' and PaperDetail.TitleID=FillBlankProblem.ID and [PaperID]=' + +Cast(@PaperID AS varchar(10))
exec sp_executesql @sql
end
end
GO
-----------------------------------------------------------------
我把这个Proc_PaperDetail修改成Proc_UserAnswer就不行了.语法检查的成功的,但是不是下面语句缺少一些引号啊?
set @sql='select * from UserAnswer,SingleProblem
where [Type]=''单选题'' and
UserAnswer.TitleID=SingleProblem.ID and
[PaperID]= +Cast(@PaperID AS varchar(10) and
UserID=@UserID'
kakajya 2008-05-18
  • 打赏
  • 举报
回复
写Sql语句包含参数;如Exec Proc_UserAnswer @PaperID,@Type@UserID
leeeeleeee 2008-05-18
  • 打赏
  • 举报
回复
这里的GetDataSet只能执行查询语句
两种方式解决:
1、写Sql语句包含参数;如Exec Proc_UserAnswer @PaperID,@Type@UserID
2、改写GetDataSet,使之可以自行存储过程,加CommandType.StoredProcedure

62,052

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧