short shortRtn = 0;
SqlConnection myCnn = new SqlConnection(strCon);
SqlCommand cmdGetUserName = new SqlCommand();
myCnn.Open();
cmdGetUserName = myCnn.CreateCommand();
cmdGetUserName.CommandType = CommandType.StoredProcedure;
cmdGetUserName.CommandText = "PR_SelectUserName";
cmdGetUserName.Parameters.Add(new SqlParameter("@strUserCode",strUserCode));
cmdGetUserName.Parameters.Add(new SqlParameter("@intRtn",shortRtn));
cmdGetUserName.Parameters["@intRtn"].Direction = ParameterDirection.InputOutput;
strUserName = cmdGetUserName.ExecuteScalar().ToString();
shortRtn = (short)cmdGetUserName.Parameters["@intRtn"].Value;
myCnn.Close();
return shortRtn;

解决方案 »

  1.   

    跟执行查询差不多,要注意的是,Command对象的.CommandType 属性要是CommandType.StoredProcedure;另外要有一些参数要加进去。参数有输入型也有输出型。就是用Parameters属性就行了。
      

  2.   

    你是想了解在c#下怎么调用sqlserver存储过程吧?
    如果是,如下是我用过的例子代码:
    假设存储过程名为Sp_InsertMyTable
    在C#中如下调用:
    private int MethodOfPro(string ID,string name)
    {
    string sproc="Sp_InsertMyTable";
    SqlCommand cmd=new SqlCommand(sproc);
    cmd.CommandType=CommandType.StoreProcedure;
    cmd.Connection=this.myConnection;SqlParameter para1=new SqlParameter("v_id",SqlDbType.Char,10);
    para1.value=ID;
    cmd.Parameters.Add(para1);SqlParameter para2=new SqlParameter("v_name",SqlDbType.VarChar,20);
    //这个数据类型是Oracle的,不知道SqlServer是不是一样,不好意思:)
    para2.value=name;
    cmd.Parameters.Add(para2);if(cmd.Connection.State!=ConnectionState.Open)
         cmd.Connection.Open();
    int iAffectRows=cmd.ExecuteNonQuery();
    cmd.Connection.Close();
    return iAffectRows;
    }
    说明:上面的v_id,和v_name是存储过程中的输入参数。
    如果有存储过程中有输出参数则在
    【SqlParameter para1=new SqlParameter("v_id",SqlDbType.Char,10);
    para1.value=ID;
    cmd.Parameters.Add(para1);】中做相应的变化就可以了,主要是说明这个参数是输出的。
      

  3.   

    你也可以用SQL语言形式的.如:SqlCommandtemp.CommandText=@"EXEC produrceName "+parametername1+" ,"+parametername1+","+parametername1;
      

  4.   

    http://tech.ccidnet.com/pub/disp/Article?columnID=1105&articleID=58457&pageNO=1
      

  5.   

    把string 的选择或插入语句改存储过程的名就行了,得用参数年来获得!
      

  6.   

    建立Command对象,但是对象的CommandType属性必须设置为  Procedure
      

  7.   

    http://tech.ccidnet.com/pub/disp/Article?columnID=1105&articleID=58457&pageNO=1
      

  8.   

    下面是我写的调用存储过程的方法,存储过程有返回值,参数名为v_out_serialno,代码如下:【其他两个参数为输入参数,在过程中的参数名是:v_prefix,v_length】
    private string returnSerialNo(string sPrefix,int iLength)
    {
    string sproc="get_serialno_pro";
    OleDbCommand cmd=new OleDbCommand(sproc);
    cmd.CommandType=CommandType.StoredProcedure;
    //cmd.Connection=Conn OleDbParameter para_prefix=new OleDbParameter("v_prefix",OleDbType.Char,1);
    para_prefix.Value=sPrefix;
    cmd.Parameters.Add(para_prefix); OleDbParameter para_length=new OleDbParameter("v_length",OleDbType.Integer);
    para_length.Value=iLength;
    cmd.Parameters.Add(para_length); OleDbParameter para_out_serialno=new OleDbParameter("v_out_serialno",OleDbType.VarChar,20);
    para_out_serialno.Direction=System.Data.ParameterDirection.Output;
    cmd.Parameters.Add(para_out_serialno);
    // cmd.Parameters.Add(new System.Data.OleDb.OleDbParameter("v_out_serialno",OleDbType.VarChar,
    // 10,System.Data.ParameterDirection.Output,false,0,0,"sursn",DataRowVersion.Default,0));

    cmd.Connection=ConnClass.conn2;
    if(cmd.Connection.State!=ConnectionState.Open)
    cmd.Connection.Open();
    try
    {
    cmd.ExecuteNonQuery();
    string sSerialno=cmd.Parameters["v_out_serialno"].Value.ToString();
    cmd.Connection.Close();
    return sSerialno;
    }
    catch(Exception err)
    {
    //MessageBox.Show(err.Message);
    Debug.Fail(err.Message);
    return "";
    }
    }
    这是在Oracle环境下调用的。