我正在尝试使用存储过程来使用 detailsview 和 sqldatasource 插入记录。我收到以下错误:
过程或函数“CustRec_iu”需要未提供的参数“@firstname”。
我的 detailsview 定义如下:
<asp:DetailsView ID="dvCustDetails1" runat="server" AutoGenerateRows="False"
DataSourceID="SqlDataSource1" Height="149px" Width="469px">
<Fields>
<asp:BoundField DataField="FirstName" HeaderText="First Name"
SortExpression="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="Last Name"
SortExpression="LastName" />
<asp:CommandField ButtonType="Button" ShowInsertButton="True" />
</Fields>
</asp:DetailsView>
在后面的代码中,PageLoad 如下所示:
SqlDataSource1.ConnectionString = Connection.ConnectionStr;
//SqlDataSource1.InsertCommand = "INSERT INTO [customer] (firstname,lastname,active) values(@firstname,@lastname,@active)";
SqlDataSource1.SelectCommand = "select firstname,lastname from customer";
//SqlDataSource1.SelectCommand = "CustRec";
SqlDataSource1.InsertCommand = "CustRec_iu";
SqlDataSource1.InsertParameters.Clear();
SqlDataSource1.InsertParameters.Add(new Parameter("firstname", DbType.String));
SqlDataSource1.InsertParameters.Add(new Parameter("LastName", DbType.String));
SqlDataSource1.InsertParameters.Add(new Parameter("Active",DbType.Int16,"1"));
请注意,如果我使用注释掉的内联语句,则插入有效。
我的存储过程如下所示:
ALTER PROCEDURE dbo.CustRec_iu
(
@custid int = null,
@firstname varchar(100),
@lastname varchar(100),
@Active bit = 1
)
AS
if (isnull(@custid,0) = 0)
begin
insert into customer
(firstname,lastname,Active)
values
(@firstname,@lastname,@Active)
end
else
begin
update customer
set
firstname=@firstname,
lastname= @lastname,
active = @Active
where
custid = @custid
end
/* SET NOCOUNT ON */
RETURN
我不明白输入参数如何在 sqldatasource、detailsview 等之间进行交互。它如何与 insline 语句一起使用而不与存储过程一起使用?sql datasource 和 detailsview 在事件方面是如何工作的?谷歌搜索和打印书籍 Professional asp.net 3.5 in c# and VB 帮助不大。
提前感谢您阅读我的问题。