Note: Forums will be making significant UX changes to address key usability improvements surrounding search, discoverability and navigation. To learn more about these changes please visit the announcement which can be found HERE.

已答复 如何调用存储过程

  • 2009年6月18日 6:33
     
     

     protected DataSet getCursor(int nPges)
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "sp_getPage";
                cmd.Connection = myFun.GetConnection();

                SqlParameter nCurPge = cmd.Parameters.Add(@nCurrentPage, SqlDbType.Int, 3);
                nCurPge.Direction = ParameterDirection.Input;
                nCurPge.Value = nPges;           
                DataSet myCur = new DataSet();
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                sda.SelectCommand = cmd;
                sda.Fill("myCur");

                this.TextBox2.Text = myCur.Tables[0].Rows[i][1].ToString();
                this.TextBox3.Text = myCur.Tables[0].Rows[i][2].ToString();
                this.TextBox4.Text = myCur.Tables[0].Rows[i][3].ToString();
                this.TextBox5.Text = myCur.Tables[0].Rows[i][4].ToString();
               
            }

    编译器错误信息: CS0103: 当前上下文中不存在名称“nCurrentPage”

全部回复

  • 2009年6月18日 6:38
    版主
     
     
    SqlParameter nCurPge = cmd.Parameters.Add(“@nCurrentPage”, SqlDbType.Int, 3);

    Denn ich gehor nur dir!坚持不懈!http://hi.baidu.com/1987raymond
  • 2009年6月18日 6:50
     
     

    再请教一下,“@nCurrentPage”非要与后台调用的存储过程参数变量名一致吗?

  • 2009年6月18日 6:52
    版主
     
     
    嗯 我想原则上是的 不过我没试过哈,我一直都是写的一致的变量名 你可以自己测试看看哈
    Denn ich gehor nur dir!坚持不懈!http://hi.baidu.com/1987raymond
  • 2009年6月18日 7:00
     
     
    刚试了一下不行,或者是还有其它的调用方式?
    感觉这样不友好,如果我只知道过程名,但只是知道传递参数的类型那怎么办?或者万一存储过程加密了呢?
  • 2009年6月18日 7:05
    版主
     
     
    如果你知道存储过程名,可以通过 SqlCommandBuilder.DeriveParameters 获取存储过程的参数
    知识改变命运,奋斗成就人生!
  • 2009年6月18日 7:07
    版主
     
      包含代码
    private static SqlParameter[] DiscoverSpParameterSet(SqlConnection connection, string spName, bool includeReturnValueParameter)
    {
    	if( connection == null ) throw new ArgumentNullException( "connection" );
    	if( spName == null || spName.Length == 0 ) throw new ArgumentNullException( "spName" );
    
    	SqlCommand cmd = new SqlCommand(spName, connection);
    	cmd.CommandType = CommandType.StoredProcedure;
    
    	connection.Open();
    	SqlCommandBuilder.DeriveParameters(cmd);
    	connection.Close();
    
    	if (!includeReturnValueParameter) 
    	{
    		cmd.Parameters.RemoveAt(0);
    	}
            
    	SqlParameter[] discoveredParameters = new SqlParameter[cmd.Parameters.Count];
    
    	cmd.Parameters.CopyTo(discoveredParameters, 0);
    
    	foreach (SqlParameter discoveredParameter in discoveredParameters)
    	{
    		discoveredParameter.Value = DBNull.Value;
    	}
    	return discoveredParameters;
    }

    知识改变命运,奋斗成就人生!
  • 2009年6月18日 7:15
     
     
    SqlParameter P1 = new SqlParameter("参数名", "值");
    P1.Direction = ParameterDirection.Input;
    cmd.Parameters.Add(P1);
    CC.FENG
  • 2009年6月18日 7:28
     
     

    感觉还是vfp调用方便,管它三七二十一,知道调用方式,传值过去即可.方便呀,
    怎么这MS开发的越来越不人性化呀

  • 2009年6月18日 7:32
    版主
     
     
    这种方式是可以的, 但你需要自己写方法支持你的写法
    知识改变命运,奋斗成就人生!
  • 2009年6月18日 7:32
    版主
     
     已答复
    SqlHelper 类中就有这样的实现方式,你可以下载源代码看看
    知识改变命运,奋斗成就人生!