2011-11-15 2 views
2

Je récupère l'identité scope_identity d'une entrée db, et je souhaite utiliser cette variable dans un autre SqlDataSource, principalement en tant que mais je suis incapable d'accéder à la variable. J'ai la variable affichée dans un msgbox, et il affiche correctement, je ne suis pas sûr comment y accéder dans le SqlDataSource. Voici mon code;Utilisation du paramètre de sortie dans SqlDataSource

Ceci est la source de données qui insère la première information et a reçu la portée_identité, ainsi que l'événement _inserted; code:

<asp:SqlDataSource ID="InsertPatientInfo" runat="server" ConnectionString="<%$ ConnectionStrings:DataConnectionString %>" 
providername="<%$ ConnectionStrings:DataConnectionString.ProviderName %>" 
    InsertCommandType="StoredProcedure" 
    InsertCommand = "InsertPatInfo" 
    OnInserted="InsertPatientInfo_Inserted"> 
    <InsertParameters> 
     <asp:ControlParameter ControlID = "PatInfoName" Name="PatName" PropertyName="text"/> 
     <asp:ControlParameter ControlID = "PatInfoAge" Name="PatAge" PropertyName="text" /> 
     <asp:ControlParameter ControlID = "PatInfoState" Name="PatState" PropertyName="selectedvalue" /> 
     <asp:ControlParameter ControlID = "PatInfoCountry" Name="PatCountry" PropertyName="selectedvalue" /> 
     <asp:ControlParameter ControlID = "PatInfoPhone" Name="PatPhone" PropertyName = "text" /> 
     <asp:ControlParameter ControlID = "PatInfoCell" Name="PatCell" PropertyName="Text" /> 
     <asp:Parameter DbType="Int32" Direction="Output" Name="PatID" /> 
    </InsertParameters> 
Protected Sub InsertPatientInfo_Inserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) Handles InsertPatientInfo.Inserted 
    Dim PatID As String = e.Command.Parameters("@PatID").Value 
    MsgBox(PatID, MsgBoxStyle.Critical) 
End Sub 

Voici l'appel à la prochaine SqlDataSource, avec InsertCommand inclus, je prévois de passer à une procédure stockée une fois que je le faire fonctionner; Je continue à obtenir l'erreur, que le scalaire varaible @PatID n'est pas défini, suis-je censé le déclarer comme un et si oui, quel type? code:

 <asp:SqlDataSource ID="InsInqInfo" runat="server" ConnectionString="<%$ ConnectionStrings:DataConnectionString %>" 
     providerName="<%$ ConnectionStrings:DataConnectionString.ProviderName %>" 
     InsertCommand = "Insert into tblInquirer(InqPatID, InqName, InqState, InqCountry, InqPhone, InqRelation, InqVia, InqCareLevel, InqProgram) VALUES 
     (@PatID, @InqName, @InqState, @InqCountry, @InqPhone, @InqRelation, @InqVia, @InqCareLevel, @InqProgram)" 


<InsertParameters> 

      <asp:ControlParameter ControlID = "InqName" Name="InqName" PropertyName="text"/> 
      <asp:ControlParameter ControlID = "InqStateList" Name="InqState" PropertyName="selectedvalue" /> 
      <asp:ControlParameter ControlID = "InqCountry" Name="InqCountry" PropertyName="selectedvalue" /> 
      <asp:ControlParameter ControlID = "InqPhone" Name="InqPhone" PropertyName="Text" /> 
      <asp:ControlParameter ControlID = "radInqRel" Name="InqRelation" PropertyName="selectedvalue" /> 
      <asp:ControlParameter ControlID = "InitInqVia" Name="InqVia" PropertyName = "selectedvalue" /> 
      <asp:ControlParameter ControlID = "CareLevel" Name="InqCareLevel" PropertyName="selectedvalue" /> 
      <asp:ControlParameter ControlID = "ProgSelect" Name="InqProgram" PropertyName="selectedvalue" />  
     </InsertParameters> 

Merci à l'avance, Nick

Répondre

0

Suivez ces pages pour voir plus d'informations sur les sources de données typées et leurs paramètres .. http://www.tek-tips.com/faqs.cfm?fid=7074

http://msdn.microsoft.com/en-us/library/ms228051.aspx

http://msdn.microsoft.com/en-us/library/z72eefad.aspx

<asp:Parameter Name="EmpID" Direction="Output" Type="Int32" DefaultValue="0" /> 

Vérifiez l'instruction d'insertion dans cet extrait de code.

<asp:sqlDataSource ID="EmployeeDetailsSqlDataSource" 
    SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID" 

    InsertCommand="INSERT INTO Employees(LastName, FirstName) VALUES (@LastName, @FirstName); 
       SELECT @EmpID = SCOPE_IDENTITY()" 
    UpdateCommand="UPDATE Employees SET [email protected], [email protected] 
        WHERE [email protected]" 
    DeleteCommand="DELETE Employees WHERE [email protected]" 

    ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>" 
    OnInserted="EmployeeDetailsSqlDataSource_OnInserted" 
    RunAt="server"> 

    <SelectParameters> 
    <asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" /> 
    </SelectParameters> 

    <InsertParameters> 
    <asp:Parameter Name="EmpID" Direction="Output" Type="Int32" DefaultValue="0" /> 
    </InsertParameters> 

</asp:sqlDataSource> 
+0

Je suis passé par ce tutoriel et je crois que mon code est exactement en ressemblance avec le sien. Le problème est que je ne peux pas accéder à mon @PatID en dehors de l'événement .inserted. Je l'ai mis dans le msgbox() et il affiche l'ID correct, mais je suis incapable de l'utiliser comme un avec une SqlDataSource différente, donc je peux l'utiliser comme une clé relationnelle dans une autre table de base de données. Est-ce qu'il y a un moyen de faire ça? –

0

Dans ce gestionnaire InsertPatientInfo_Inserted, vous pouvez affecter la valeur du paramètre de sortie comme la valeur par défaut de votre autre SqlDataSource nommé InsInqInfo:

Protected Sub InsertPatientInfo_Inserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) Handles InsertPatientInfo.Inserted 
    Dim PatID As String = e.Command.Parameters("@PatID").Value 
    MsgBox(PatID, MsgBoxStyle.Critical) 
    ' Assign the output as the default for 
    InsInqInfo.InsertCommand("@PatID").DefaultValue = PatID 
End Sub 

Personnellement, je déplacer tout ce code à un code derrière.

Questions connexes