功能或存储过程有太多参数 [英] Funcation or Store Procedure Has too many arguments

查看:102
本文介绍了功能或存储过程有太多参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Hello My SP

  ALTER   PROCEDURE  InsertData 

@ firstName varchar 50 ),
@ lastName varchar 50 ),
@ year varchar 50 ),
@ school varchar 50 ),
@ city varchar 50 ),
@ state varchar 50 ),
@ country varchar 50 ),
@ e_mail varchar 50 ),
@ mobile varchar 50

AS
/ * SET NOCOUNT ON * /
DECLARE @ Count int
选择 @ Count =计数(PersonID)来自 Person WHERE Mobile = @ mobile

IF @ Count = 0
BEGIN
INSERT INTO Person(FirstName,LastName, Year1,School,City,State,Country,E_mail,Mobile)
VALUES
@ firstName @ lastName @ year @学校 @ city @ state @country @ e_mail @ mobile
END
RETURN @ Count
< span class =code-keyword> RETURN





我的DAL.cs文件

  public   int  Ins ert(人员)
{
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
SqlCommand dCmd = new SqlCommand( InsertData ,conn);
dCmd.CommandType = CommandType.StoredProcedure;
尝试
{

// dCmd.Parameters.AddWithValue(@ firstName,person.FirstName);
dCmd.Parameters.AddWithValue( @ firstName,person.FirstName);
dCmd.Parameters.AddWithValue( @ lastName,person.LastName);
dCmd.Parameters.AddWithValue( @ year,person.Year1);
dCmd.Parameters.AddWithValue( @ school,person.School);
dCmd.Parameters.AddWithValue( @ city,person.City);
dCmd.Parameters.AddWithValue( @ state,person.State);
dCmd.Parameters.AddWithValue( @ country,person.Country);
dCmd.Parameters.AddWithValue( @ e_mail,person.E_mail);
dCmd.Parameters.AddWithValue( @ mobile,person.Mobile);

return dCmd.ExecuteNonQuery();
}
catch
{
throw ;
}
最后
{
dCmd.Dispose();
conn.Close();
conn.Dispose();
}
}





任何人都可以告诉我解决方案吗?

解决方案

以这种方式更改您的SP:

  ALTER   PROCEDURE  InsertData 

@ firstName varchar 50 ),
@ lastName varchar 50 ),
@ year varchar 50 ),
@ school varchar 50 ),
@ city varchar 50 ),
@sta te varchar 50 ),
@country varchar 50 ),
@ e_mail varchar 50 ),
@ mobile varchar 50

AS
BEGIN
IF EXISTS SELECT PersonID FROM Person WHERE Mobile = @ mobile
BEGIN
- 选择PersonId
SELECT PersonID FROM WHERE Mobile = @ mobile
END
ELSE
BEGIN
INSERT INTO 人(FirstName,LastName,Year1,School,City,State,Country,E_mail,Mobile) VALUES @ firstName @ lastName @ year @ school @ city @ state @ country @ e_mail @ mobile
- 返回新的PersonID
RETURN @@ IDENTITY
END
结束


你好



最后我得到了这个问题的解决方案,我正在使用Web应用程序项目,所以没有App_Code Foder,



引用:

,对于Web App Projects,你应该添加一个名为'CodeFolder'的文件夹,然后在那里添加你的类。然后右键单击该类文件的属性并将其构建配置设置为编译而不是内容。





我这样做了&得到我的问题的答案。



http://stackoverflow.com/questions/2277742/app-code-folder-is-missing-in-vs-2010 [< a href =http://stackoverflow.com/questions/2277742/app-code-folder-is-missing-in-vs-2010target =_ blanktitle =New Window> ^ ]


Hello My SP

ALTER PROCEDURE InsertData
	(
		@firstName varchar(50),
		@lastName varchar(50),
		@year varchar(50),
		@school varchar(50),
		@city varchar(50),
		@state varchar(50),
		@country varchar(50),
		@e_mail varchar(50),
		@mobile varchar(50)
	)
AS
	/* SET NOCOUNT ON */ 
	DECLARE @Count int
	select @Count = Count(PersonID) from Person WHERE Mobile = @mobile
	
	IF @Count = 0 
		BEGIN
				INSERT INTO Person (FirstName, LastName, Year1,School,City,State,Country,E_mail,Mobile) 
				VALUES 
				(@firstName, @lastName,@year,@school,@city,@state,@country,@e_mail,@mobile)
		END 
		RETURN @Count
	RETURN



My DAL.cs file

public int Insert(Person person)
   {
       SqlConnection conn = new SqlConnection(connStr);
       conn.Open();
       SqlCommand dCmd = new SqlCommand("InsertData", conn);
       dCmd.CommandType = CommandType.StoredProcedure;
       try
       {

          // dCmd.Parameters.AddWithValue("@firstName", person.FirstName);
           dCmd.Parameters.AddWithValue("@firstName", person.FirstName);
           dCmd.Parameters.AddWithValue("@lastName", person.LastName);
           dCmd.Parameters.AddWithValue("@year", person.Year1);
           dCmd.Parameters.AddWithValue("@school", person.School);
           dCmd.Parameters.AddWithValue("@city", person.City);
           dCmd.Parameters.AddWithValue("@state", person.State);
           dCmd.Parameters.AddWithValue("@country", person.Country);
           dCmd.Parameters.AddWithValue("@e_mail", person.E_mail);
           dCmd.Parameters.AddWithValue("@mobile", person.Mobile);

           return dCmd.ExecuteNonQuery();
       }
       catch
       {
           throw;
       }
       finally
       {
           dCmd.Dispose();
           conn.Close();
           conn.Dispose();
       }
   }



Can any one tell me the Solution?

解决方案

Change your SP in that way:

ALTER PROCEDURE InsertData
	(
		@firstName varchar(50),
		@lastName varchar(50),
		@year varchar(50),
		@school varchar(50),
		@city varchar(50),
		@state varchar(50),
		@country varchar(50),
		@e_mail varchar(50),
		@mobile varchar(50)
	)
AS
BEGIN
	IF EXISTS(SELECT PersonID FROM Person WHERE Mobile = @mobile)
            BEGIN
                --select PersonId
		SELECT PersonID FROM Person WHERE Mobile = @mobile
            END
	ELSE
            BEGIN
		INSERT INTO Person (FirstName, LastName, Year1,School,City,State,Country,E_mail,Mobile) VALUES (@firstName, @lastName,@year,@school,@city,@state,@country,@e_mail,@mobile)
                --return new PersonID
	        RETURN @@IDENTITY
	    END 
END


Hello

Finally I got Solution of this Problem, I am using web Application Project, So there is no App_Code Foder,

Quote:

, for Web App Projects, you should instead Add a folder called something like 'CodeFolder' and then add you class in there. Then right click properties on that class file and set its build config to compile rather than content.



I did this & Get answer of my problem.

http://stackoverflow.com/questions/2277742/app-code-folder-is-missing-in-vs-2010[^]


这篇关于功能或存储过程有太多参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆