在下是菜鸟,以前用vb,不用存储过程,这次想试试用c#和存储过程,结果问题一堆堆,快要疯了,大家帮看看下面的问题吧:
数据表:
UserID [nvarchar] (50) 
UserPWD [nvarchar] (50) 
UserType [smallint] 
RecoMan [nvarchar] (50) 
存储过程:
         CREATE PROCEDURE DBO.AddUsers
        (
           @UserID NVarChar(50),
           @UserPWD NVarChar(50),
           @UserType SmallInt,
           @RecoMan NVarChar(50)        )
        As
        INSERT Users
       (
          UserID,
          UserPWD
          UserType,
          RecoMan
       )VALUES(
          @UserID,
          @UserPWD
          @UserType,
          @RecoMan
       )
       GO引用存储过程的函数:
                public void AddUsers(string userid,string userpwd,int usertype,string recoman)
                {
                        SqlConnection myconn=new SqlConnection(strconn);               
                        SqlCommand mycmd=new SqlCommand("AddUsers",myconn);
                        mycmd.CommandType=CommandType.StoredProcedure;
                        mycmd.Parameters.Add(new SqlParameter("@UserID",SqlDbType.NVarChar,50));
                        mycmd.Parameters["@UserID"].Value=userid;
                        mycmd.Parameters.Add(new SqlParameter("@UserPWD",SqlDbType.NVarChar,50));
                        mycmd.Parameters["@UserPWD"].Value=userpwd;
                        mycmd.Parameters.Add(new SqlParameter("@UserType",SqlDbType.SmallInt,2));
                        mycmd.Parameters["@UserType"].Value=usertype;
                        mycmd.Parameters.Add(new SqlParameter("@RecoMan",SqlDbType.NVarChar,50));
                        mycmd.Parameters["@RecoMan"].Value=recoman;
try
{
myconn.Open();
mycmd.ExecuteNonQuery();
}
catch(System.Data.SqlClient.SqlException e)
{
throw new Exception(e.Message);
}
finally
{
mycmd.Dispose();
myconn.Close();
}                }执行的结果:为过程或函数AddUsers()指定了过多的参数!

解决方案 »

  1.   

    insert into 
    我记得 好像回过这样一个帖子
      

  2.   

    INSERT INTO(你缺少这个关键字) Users
           (
              UserID,
              UserPWD
              UserType,
              RecoMan
           )VALUES(
              @UserID,
              @UserPWD
              @UserType,
              @RecoMan
           )
      

  3.   

    are you calling this method multiple times? trySqlCommand mycmd=new SqlCommand("AddUsers",myconn);
    mycmd.CommandType=CommandType.StoredProcedure;
    mycmd.Parameters.Clear();
    mycmd.Parameters.Add(new SqlParameter("@UserID",SqlDbType.NVarChar,50));
    ...
      

  4.   

    楼上几个说的不对,into关键字可以省略,同意思归大哥。
      

  5.   

    看不出来问题所在你的数据库链接是否正确?
    我曾经因为连着数据A,修改数据库B里面的存储过程而出错:D
    另:
    跟踪一下你的 mycmd.Parameters
    看看到底是多少个参数
      

  6.   

    跟踪下,看看到底是多少个参数
    就是多次调用该方法
    也是重新new一个command,我觉得不存在Clear的问题
      

  7.   

    你在调用AddUsers括号内几个参数
    看你的定义
     AddUsers(string userid,string userpwd,int usertype,string recoman)
    一共4个
    贴你调用的代码看看
      

  8.   

    调用存促过程的时候不用这么严谨
    我一般都是
    mycmd.Parameters.Add("@UserID",userid);
    这样来添加参数
      

  9.   

    AddUsers(txtID.Text,"aaa",2,"gbh");
    这个应该没问题
      

  10.   

    “/”应用程序中的服务器错误。
    --------------------------------------------------------------------------------为过程或函数 AddUsers 指定的参数太多。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Exception: 为过程或函数 AddUsers 指定的参数太多。源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  堆栈跟踪: 
    [Exception: 为过程或函数 AddUsers 指定的参数太多。]
       GbhSky.Base.AddUsers(String userid, String userpwd, Int32 usertype, String recoman) +577
       regist.Register(Object sender, EventArgs e) +63
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +83
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
       System.Web.UI.Page.ProcessRequestMain() +1277 
    --------------------------------------------------------------------------------
    版本信息: Microsoft .NET Framework 版本:1.1.4322.573; ASP.NET 版本:1.1.4322.573
      

  11.   

    建议检查你的系统是不是出错,比如重装一次系统或SQL。
      

  12.   

    用SQL SERVER 事件跟踪器跟踪一下咯,看看到底调用的时候传了几个参数
      

  13.   

    what is in your Button_Click??
      

  14.   

    to思归
       Users users=new Users;
       users.AddUsers(txtID.Text,"aaa",2,"gbh");
     //Users 是我自己定义的一个类,继承Base类,而上面的AddUsers()函数就是在Base里定义的
      

  15.   

    Users 类中有没有覆盖Base类的AddUser方法?
      

  16.   

    1. what is in your connection string? is the user running dbo? do you have separate copies of AddUsers in your database?2.  call mycmd.Parameters.Clear() before adding any parameters;SqlCommand mycmd=new SqlCommand("AddUsers",myconn);
    mycmd.CommandType=CommandType.StoredProcedure;
    mycmd.Parameters.Clear();
    //...
      

  17.   

    没有,Users里只有一个类的定义而已
    现在执行这段程序又有新错误了,呵呵
    “/”应用程序中的服务器错误。
    --------------------------------------------------------------------------------超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: 超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  堆栈跟踪: 
    [InvalidOperationException: 超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。]
       System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction) +335
       System.Data.SqlClient.SqlConnection.Open() +383
       GbhSky.Base.AddUsers(String userid, String userpwd, Int32 usertype, String recoman) +528
       regist.Register(Object sender, EventArgs e) +63
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +83
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
       System.Web.UI.Page.ProcessRequestMain() +1277 
    --------------------------------------------------------------------------------
    版本信息: Microsoft .NET Framework 版本:1.1.4322.573; ASP.NET 版本:1.1.4322.573
      

  18.   

    mycmd.Parameters.Clear();这句早加进去了,没有什么变化呀
      

  19.   

    下面是跟踪器的跟踪结果:
    exec AddUsers @UserID = N'[email protected]', @UserPWD = N'aaa', @UserType = 2, @RecoMan = N'gbh'
      

  20.   

    说明代码没问题
    那就看 你连接数据的帐号是不是dbo因为你定义的存储过程所有者是dbo
      

  21.   

    connstr="Server=LocalHost;uid=sa;password=;database=talent"
      

  22.   

    搞了半天还是sql server的问题,连累大家了,给分呀!