在下是菜鸟,以前用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()指定了过多的参数!
数据表:
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()指定了过多的参数!
解决方案 »
- 100028755程序员技术群欢迎加入..
- 求sql语句 有答案立刻结贴
- 在页面中写 JS 段,跟把 JS 段写在 JS 文件中,然后在页面引用,最大的差别在哪儿?
- gridview 数据导入到excel
- GridView和CheckBox结合使用的问题
- ewebeditor和vs2005的疑问??????????????
- 急急急 急急急急急急 求一个ASP.NET(SQLSERVER或ACCESS)网上书店源码 调试好了的 在线等
- ASP.NET配置错误,急
- 怎样用在codebehind中操作控件的OnClick?
- 在aap.net中的aspx的网页文件中,怎样实现本网页的“另存为”的功能??急!!!
- 求asp.net的防刷新记数器代码
- 出现错误信息:"请求在此上下文中不可用",用Request["text"]出现的错误信息。
我记得 好像回过这样一个帖子
(
UserID,
UserPWD
UserType,
RecoMan
)VALUES(
@UserID,
@UserPWD
@UserType,
@RecoMan
)
mycmd.CommandType=CommandType.StoredProcedure;
mycmd.Parameters.Clear();
mycmd.Parameters.Add(new SqlParameter("@UserID",SqlDbType.NVarChar,50));
...
我曾经因为连着数据A,修改数据库B里面的存储过程而出错:D
另:
跟踪一下你的 mycmd.Parameters
看看到底是多少个参数
就是多次调用该方法
也是重新new一个command,我觉得不存在Clear的问题
看你的定义
AddUsers(string userid,string userpwd,int usertype,string recoman)
一共4个
贴你调用的代码看看
我一般都是
mycmd.Parameters.Add("@UserID",userid);
这样来添加参数
这个应该没问题
--------------------------------------------------------------------------------为过程或函数 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
Users users=new Users;
users.AddUsers(txtID.Text,"aaa",2,"gbh");
//Users 是我自己定义的一个类,继承Base类,而上面的AddUsers()函数就是在Base里定义的
mycmd.CommandType=CommandType.StoredProcedure;
mycmd.Parameters.Clear();
//...
现在执行这段程序又有新错误了,呵呵
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。
说明: 执行当前 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
exec AddUsers @UserID = N'[email protected]', @UserPWD = N'aaa', @UserType = 2, @RecoMan = N'gbh'
那就看 你连接数据的帐号是不是dbo因为你定义的存储过程所有者是dbo