SqlCommand cmd = new SqlCommand("s_AddSelectResult", con.conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@YearTermID", SqlDbType.Char,5).Value = yearterm;
cmd.Parameters.Add("@StudID", SqlDbType.Char,11).Value = studid;
cmd.Parameters.Add("@CourID", SqlDbType.Char,6).Value = this.dataGridView1.Rows[i].Cells[2].Value.ToString();
cmd.Parameters.Add("@CourOrder", SqlDbType.SmallInt,4).Value = this.dataGridView1.Rows[i].Cells[4].Value.ToString();
cmd.Parameters.Add("@Reupflag", SqlDbType.SmallInt,4).Value = this.dataGridView1.Rows[i].Cells[5].Value.ToString();
SqlParameter str = new SqlParameter("@rst",SqlDbType.NVarChar);
str.Direction = ParameterDirection.Output;
cmd.Parameters.Add(str);
con.conn.Open();
cmd.ExecuteNonQuery();
con.conn.Close();CREATE PROCEDURE s_AddSelectResult --增加选课纪录
(
@YearTermID char(5), --学年学期
@CourID char(6), --课程号
@StudID char(11), --学号
@CourOrder smallint, --课序号
@Reupflag smallint, --重修标志
@rst nvarchar(30) out --返回结果
)AS
DECLARE
@row char(4)--首先判断是否存在相同的纪录
IF (not exists (select * from s_selectresult where yeartermid = @YearTermID and courid = @CourID and studid = @StudID and CourOrder = @CourOrder))
BEGIN
--插入纪录
Insert into s_SelectResult(YearTermID, CourID, StudID, CourOrder, ReupFlag, BeSelected, CancelFlag,
SelectFlag, MateFlag, LastDate, Operator)
values(@YearTermID,@CourID,@StudID,@CourOrder,@ReupFlag,1,0,0,0,getdate(),'yixian') --判断是否插入成功
IF ( @@rowcount = 1)
BEGIN
SET @rst = '增加成功'
END
END
ELSE
BEGIN
SET @rst = '失败,该生已选过该课程'
END
其中winform中的这几句.
SqlParameter str = new SqlParameter("@rst",SqlDbType.NVarChar);
str.Direction = ParameterDirection.Output;
cmd.Parameters.Add(str);
错误是没有传递参数......
可是我明明是定义的是返回值的.
@rst nvarchar(30) out --返回结果事实上,如果我这样写就是对的.
str.value = "";
可我的返回值不对.在网上查了下,好像返回值有两种,谁能给俺讲讲是哪里的问题?
str.Direction = ParameterDirection.Output;
cmd.Parameters.Add(str);
这里参数没有赋值。
str.value = ""; //这样才赋值了。
之于执行结果不对,你可以把现在有的参数放到SQL里去调试储存过程,试下
exec s_AddSelectResult 参数列表
查看返回结果