asp.net - sqldatasource - detailsview - используйте сохраненную процедуру для вставки записи
Я пытаюсь использовать сохраненную процедуру для вставки записи с помощью detailsview и sqldatasource. Я получаю следующую ошибку:
Процедура или функция «CustRec_iu» ожидает параметр «@firstname», который не был предоставлен.
Мое определение подробностей выглядит следующим образом:
<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
[email protected],
lastname= @lastname,
active = @Active
where
custid = @custid
end
/* SET NOCOUNT ON */
RETURN
Что я не понимаю, как входной параметр взаимодействует между sqldatasource, detailsview и т. Д. Как он работает с инструкцией insline и не работает с сохраненной процедурой? Как sql datasource и detailsview работают с точки зрения событий? Поиск и печать Google книги Professional asp.net 3.5 на C# и VB не очень помогает.
Заранее спасибо, что прочитали мой вопрос.
Ответов (3)3
После беглого просмотра кажется, что значение по умолчанию не присвоено параметрам вставки. Попробуйте конструктор класса Parameter ...
New Parameter(name, dbType, defaultValue)
Кроме того, вам, вероятно, не нужно использовать sqldatasource в исходном коде. Вы можете попробовать следующее.
<asp:DetailsView 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>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:YourConnectionString %>"
InsertCommand="CustRec_iu"
InsertCommandType="StoredProcedure"
SelectCommand="select firstname,lastname from customer"
SelectCommandType="Text">
<InsertParameters>
<asp:Parameter Name="firstname" Type="String" />
<asp:Parameter Name="LastName" Type="String" />
<asp:Parameter Name="Active" Type="String" DefaultValue="1" />
</InsertParameters>
</asp:SqlDataSource>
Встроенные операторы работают так же, как sproc, за исключением того, что вы создаете строку с операторами @param, встроенными в строку.
Вам просто нужно вытащить обновление и вставить инструкцию в свой sproc. Затем вам нужно создать ссылки на параметры.
Если вы хотите, чтобы это перетаскивалось, вставьте оператор обновления в мастер. В худшем случае добавляются сопоставления параметров. Итак, перетаскивание здесь особо не предлагает.