收到的错误是:
过程或函数SPCustomerDetails需要参数' @ address',这是未提供的。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Data.SqlClient.SqlException:过程或函数' SPCustomerDetails'期望参数' @ address',这是未提供的。
我的存储过程是:
ALTER PROCEDURE [dbo].[SPCustomerDetails]
(
@id varchar,
@title varchar(50),
@fname varchar(50),
@Lname varchar(50),
@mob varchar(50),
@email varchar(50),
@password varchar(50),
@address varchar(50),
@altemail varchar(50),
@gender varchar(50),
@dob varchar(50),
@city varchar(50),
@country varchar(50),
@state varchar(50),
@checked varchar(50),
@opr varchar(50)
)
as
begin
if @opr='BTNNEW'
INSERT INTO TblCustomer_Details
(FName,LName,Email,Password,Contact_No,checked)
VALUES
(@fname,@Lname,@email,@password,@mob,@checked)
else if @opr='BTNUPDATE'
Update TblCustomer_Details
set
Title=@title,
FName=@fname,
LName=@Lname,
Email=@email,
alt_Email=@altemail,
Address=@address,
Password=@password,
Gender=@gender,
DOB=@dob,
Contact_No=@mob,
Country=@country,
State=@state,
City=@city
where
Cust_ID=@id
else if @opr='BTNDELETE'
delete TblCustomer_Details
from TblCustomer_Details
where
Cust_ID=@id
执行程序:
con.ExeQry(" exec SPCustomerDetails '" + fname.Text.Trim() + "',N'" +
lname.Text.Trim() + "',N'" + pemail.Text.Trim() + "',N'" +
cpassword.Text.Trim() + "',N'" + mobile.Text.Trim() + "',N'" +
offers.Checked + "','" + opr.ToUpper() + "'");
答案 0 :(得分:0)
尝试这种技巧: -
CREATE PROCEDURE ProcName
@Parameter1 VARCHAR (100) = NULL
AS
/* check for the NULL */
if (@Parameter1 IS NULL)
BEGIN
/* your code*/
END
/* In Query*/
SELECT *
FROM Table
WHERE Column = @Parameter1
答案 1 :(得分:0)
con.ExeQry(" exec SPCustomerDetails '" + fname.Text.Trim() + "',N'" + lname.Text.Trim() + "',N'" + pemail.Text.Trim() + "',N'" + cpassword.Text.Trim() + "',N'" + mobile.Text.Trim() + "',N'" + offers.Checked + "','" + opr.ToUpper() + "'");
你在con.ExeQry中给出的字符串就像这样显示
exec SPCustomerDetails'fname',N'lname',N'mobile',N'pemail',N'pwd',N'offers','opr'
它抛出sql异常
这里我采取fname.Text.Trim()= fname,lname.Text.Trim()= lname ......
它应该像这样
exec SPCustomerDetails'fname','Nlname','Npemail','Npwd','Nmovile','Noffers','opr'
你说你第一次传递7个参数。所以第一次传递NULL,你不想传递像这样的参数
exec SPCustomerDetails NULL,NULL, 'FNAME',” Nlname”,NULL,” Npemail”,” Npwd”,NULL,” Nmovile”,” Noffers',NULL,NULL,NULL,NULL,NULL, 'OPR'
我只是用sqlquery样式编写查询将其转换为您的Asp.net样式
像 con.ExeQry(“exec SPCustomerDetails .....
你给出了不同的顺序,而参数传递你应该以你在存储过程中提到的方式给出参数
答案 2 :(得分:0)
您的问题是您希望将某些字段声明为可选字段。不幸的是,根据给出的代码,您似乎假设SQL将根据您传递给SPCustomerDetails
的调用的变量名称“计算出”您的意思。
您的存储过程调用仅解析为:
exec SPCustomerDetails 'Bob', N'Smith', N'bob@sample.com', N'hunter2',
N'07111 1234', N'True', 'True'
将传入以填充前七个参数;第八个,@address
,将是第一个没有价值因此你看到的错误。
如果希望在存储过程调用中具有默认值(因此可选),可以在过程定义中通过在参数后面加上默认值来声明它;例如:
ALTER PROCEDURE [dbo].[SPCustomerDetails]
(
@id varchar,
@title varchar(50) = null,
@fname varchar(50),
...
不需要传入@title
字段。您还需要更改存储过程调用以直接填充各个参数。您的数据库调用需要阅读:
exec SPCustomerDetails @fname = 'Bob',
@lname = 'Smith',
@email = 'bob@sample.com'
或代码:
con.ExeQry(" exec SPCustomerDetails @fname = '" + fname.Text.Trim() + "'," +
" @lname = '" + lname.Text.Trim() + "'," +
" @email = '" + email.Text.Trim() + "'," +
...
那就是说,这个代码还有另外两个问题也应该解决,修复范围超出了这个答案的范围: