output的变量好像也要传进存储过程的吧?你有没有给?存储过程里面声明变量最好给个长度
@StuID nvarchar(12) output

解决方案 »

  1.   

    ExecuteReader();是可以的,ExecuteNonQuery();好像就得不到返回值
      

  2.   

    SqlCommand dcmd = new SqlCommand();
    dcon.Open();
    dcmd.Connection = dcon;
    dcmd.CommandType = CommandType.StoredProcedure;
    dcmd.CommandText = "sp_format_detail";
    dcmd.Parameters.Add("@aspecttitle" , SqlDbType.VarChar ,50);
    dcmd.Parameters.Add("@subjecttitle" , SqlDbType.VarChar ,50);
    dcmd.Parameters.Add("@contentformat" , SqlDbType.VarChar ,500);
    dcmd.Parameters["@aspecttitle"].Value = aspecttitle;
    dcmd.Parameters["@subjecttitle"].Value = subjecttitle;
    dcmd.Parameters["@contentformat"].Direction = ParameterDirection.Output;
                dcmd.ExecuteNonQuery();
    contentformat =dcmd.Parameters["@contentformat"].Value.ToString();
    dcon.Close();
      

  3.   

    少了 关键的一句
    objCmd.Parameters["@StuID"].Direction = ParameterDirection.Output;
      

  4.   

    sqlConnection =new SqlConnection(this.ConnectionString);
    sqlConnection.Open();
    SqlCommand sqlCommand =new SqlCommand("sp_Staff_Login",sqlConnection);
    sqlCommand.CommandType =CommandType.StoredProcedure;
    sqlCommand.Parameters.Add("@aaa",aaa);
    sqlCommand.Parameters.Add("@bbb",bbb);
    SqlParameter ParaResult = sqlCommand.Parameters.Add("@ccc",SqlDbType.Int);
    ParaResult.Direction = ParameterDirection.Output; sqlCommand.Prepare();
    sqlCommand.ExecuteNonQuery();
    Result =(int)sqlCommand.Parameters["@ccc"].Value;
      

  5.   

    对,同意sualtring(VIP)
    是不是漏了direction?
      

  6.   

    “sqlCommand.Parameters.Add("@aaa",aaa);
    sqlCommand.Parameters.Add("@bbb",bbb);
    SqlParameter ParaResult = sqlCommand.Parameters.Add("@ccc",SqlDbType.Int);
    ParaResult.Direction = ParameterDirection.Output;”
    is ok怎么没有帖主反应
      

  7.   

    我把这个时间的代码都给出来吧,为什么每次都显示none?
    private void btnLogin_Click(object sender, System.EventArgs e)
    {
      SqlCommand objCmd = new SqlCommand("LoginID_PWD",this.sqlConnection);
      objCmd.CommandType = CommandType.StoredProcedure;
      
      SqlParameter objParam = objCmd.Parameters.Add("@UserName",SqlDbType.VarChar,20);
      objParam.Direction = ParameterDirection.Input;
      objParam.Value = TBoxUsername.Text;  objParam = objCmd.Parameters.Add("@UserPWD",SqlDbType.VarChar,20);
      objParam.Direction = ParameterDirection.Input;
      objParam.Value = TBoxPassword.Text;  objParam = objCmd.Parameters.Add("@StuID",SqlDbType.NVarChar,12);
      objParam.Direction = ParameterDirection.Output;  string stu_id = "";
      try
      {
      objCmd.Connection.Open();
      objCmd.ExecuteNonQuery();
      stu_id = objCmd.Parameters["@StuID"].Value.ToString();
      objCmd.Connection.Close();
      }
      catch( SqlException ex)
      {
        LblInfo.Text = ex.Message;
      }
      if( stu_id == "" ) Mess.Text = "none";
      else Mess.Text = stu_id;
    }
    我不用存储过程都通过了,但是用了存储过程就是通不过?
    是不是连不到数据库?
      

  8.   

    原来是这样呀stu_id = objCmd.Parameters["@StuID"].Value.ToString();应为:stu_id  = parameters[3].Value.ToString();
      

  9.   

    1.命令的参数默认的为Input,不必声明
    2.代码如下: SqlCommand objCmd = new SqlCommand("LoginID_PWD",this.sqlConnection);
    objCmd.CommandType = CommandType.StoredProcedure;  
    objCmd.Parameters.Add("@UserName",SqlDbType.VarChar,20) =TBoxUsername.Text;
    objCmd.Parameters.Add("@UserPWD",SqlDbType.VarChar,20).Value = TBoxPassword.Text;
    objCmd.Parameters.Add("@StuID",SqlDbType.NVarChar,12).Direction = ParameterDirection.Output;
    string stu_id = "";
    try
    {
    objCmd.Connection.Open();
    objCmd.ExecuteNonQuery();
    stu_id = objCmd.Parameters["@StuID"].Value.ToString();
    objCmd.Connection.Close();
    }
    catch( SqlException ex)
    {
    LblInfo.Text = ex.Message;
    }
    if( stu_id == "" ) Mess.Text = "none";
    else Mess.Text = stu_id;
      

  10.   

    刚才代码没有去掉格式
    再贴一次:
    SqlCommand objCmd = new SqlCommand("LoginID_PWD",this.sqlConnection);
    objCmd.CommandType = CommandType.StoredProcedure;  
    objCmd.Parameters.Add("@UserName",SqlDbType.VarChar,20) =TBoxUsername.Text;
    objCmd.Parameters.Add("@UserPWD",SqlDbType.VarChar,20).Value = TBoxPassword.Text;
    objCmd.Parameters.Add("@StuID",SqlDbType.NVarChar,12).Direction = ParameterDirection.Output;
    string stu_id = "";
    try
    {
    objCmd.Connection.Open();
    objCmd.ExecuteNonQuery();
    stu_id = objCmd.Parameters["@StuID"].Value.ToString();
    objCmd.Connection.Close();
    }
    catch( SqlException ex)
    {
    LblInfo.Text = ex.Message;
    }
    if( stu_id == "" ) Mess.Text = "none";
    else Mess.Text = stu_id;
      

  11.   

    你的存储过程有问题啊,
    存储过程中的NVarChar和VarChar变量都要指定长度的,
    如果不指定长度,默认长度是1,而且也不会报错的。
      

  12.   

    CREATE PROCEDURE LoginID_PWD
         @UserName varchar(20),
         @UserPWD varchar(20),
         @StuID nvarchar(12) output   
     AS
    SELECT @StuID = stu_id
    FROM student
    WHERE username = @UserName AND password = @UserPWD
    在存储过程中,是否应该如上面所写,比如varchar(20)这样修改?
      

  13.   

    问个傻问题:怎么在sql server个人版中调试存储过程?
      

  14.   

    用查询分析器,在左边对象浏览器中找到你要的存储过程,
    右键点编辑,编辑完按F5就自动检查语法并保存。
    或者右键点打开就可以直接指定参数运行了。其实在.net里面也可以直接调试的,差不多。
      

  15.   

    哦,忘了,当然前提是你装sql server的时候装了客户端工具。
      

  16.   

    CREATE PROCEDURE LoginID_PWD
         @UserName varchar(20),
         @UserPWD varchar(20)
       
     AS
    SELECT stu_id
    FROM student
    WHERE username = @UserName AND password = @UserPWD
    这样写存储过程,这样执行
    myConnection.Open();
    int retVal = Convert.ToInt32(myCommand.ExecuteScalar());
    myConnection.Close();
    return retVal;
    不就很方便吗?为什么要写多一个参数啊?