2009-02-26 7 views
1

Ich versuche, gespeicherte Proc verwenden Datensatz mit Detailsview und sqldatasource einzufügen. Ich erhalte den folgenden Fehler:asp.net - sqldatasource - detailsview - verwenden Sie gespeicherte Proc zum Einfügen von Datensatz

Prozedur oder Funktion 'CustRec_iu' erwartet Parameter '@firstname', der nicht geliefert wurde.

Meine Details Definition lautet wie folgt:

<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> 

Im Code hinter sieht Pageload wie folgt:

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")); 

Beachten Sie, dass, wenn ich benutze den Einsatz Werke Inline-Anweisung auf Kommentar dann.

Meine gespeicherte Prozedur sieht wie folgt aus:

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 

Was nicht verstehe ich, wie der Eingangsparameter zwischen SqlDataSource in Wechselwirkung tritt, Details usw. Wie es mit insline Anweisung funktioniert und nicht mit gespeicherten proc arbeiten? Wie funktionieren SQL-Datenquelle und Detailansicht in Bezug auf Ereignisse? Google suchen und drucken Buch Professional asp.net 3.5 in C# und VB ist nicht viel helfen.

Vielen Dank im Voraus, um meine Frage zu lesen.

Antwort

2

ich glaube, Sie SqlDataSource1.InsertCommandType = CommandType.StoredProcedure

+0

das hat funktioniert ... vielen Dank ... –

+0

Gute Sache. Ihre Begrüßung –

0

Nach einem kurzen Blick sieht es so aus, als sei den Einfügeparametern kein Standardwert zugewiesen. Versuchen Sie, die Parameter-Klasse Konstruktor ...

New Parameter(name, dbType, defaultValue) 

Auch brauchen Sie vermutlich nicht hinter dem SqlDataSource im Code zu tun. Sie könnten Folgendes versuchen.

<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> 
0

Inline statesments Arbeit ebenso wie die sproc fehlen möglicherweise, außer dass Sie die Zeichenfolge mit den @param Anweisungen eingebettet in der Zeichenfolge erstellen.

Sie sollten nur Ihr Update einziehen und Anweisung in Ihrem Sproc einfügen. Sie müssen dann die Parameterverknüpfungen erstellen.

Wenn Sie Drag & Drop verwenden möchten, fügen Sie die Aktualisierungsanweisung in den Assistenten ein. Im schlimmsten Fall werden die Parameterzuordnungen hinzugefügt. Das Drag and Drop bietet also hier nicht wirklich viel.

Verwandte Themen