2016-04-12 19 views
1

Ben Aşağıdaki tabloSqlDataSource çalıştırmak saklı yordam iki kez

[Department] [Location] [Project]  [Job Title] [Qty] 
------------------------------------------------------------- 
HR   Jeddah  Andalusia  JT2   5 
IT   Jeddah  Head Office  JT1   3 

ve aşağıdaki

CREATE PROCEDURE [dbo].[MManPowerUpdate] 
    @Dept  nvarchar(350), 
    @Loca  nvarchar(350), 
    @Proj  nvarchar(350), 
    @JobT  nvarchar(350) 
AS 

    IF (SELECT QTY FROM [MANPOWER] WHERE ([Department] = @Dept) AND ([Location] = @Loca) AND ([Project] = @Proj) AND ([JobTitle] = @JobT)) > 0 
     Begin 
     SELECT 'Operation Completed Successfully.' AS [Result] 
     UPDATE [MANPOWER] SET QTY = QTY - 1 WHERE ([Department] = @Dept) AND ([Location] = @Loca) AND ([Project] = @Proj) AND ([JobTitle] = @JobT) 
     End 
    Else 
     Begin 
     SELECT 'Can''t Execute Operation.' AS [Result] 
     End 
Return 0 

ASP.net Kanunu olarak SqlDataSource kullanarak sıralı yordamı çalıştırmak çalışıyorum:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:_JOOBERConnectionString %>" SelectCommandType="StoredProcedure" SelectCommand="MManPowerUpdate"> 
     <SelectParameters> 
      <asp:ControlParameter ControlID="txtDept" Name="Dept" PropertyName="Text" Type="String" /> 
      <asp:ControlParameter ControlID="txtLoca" Name="Loca" PropertyName="Text" Type="String" /> 
      <asp:ControlParameter ControlID="txtProj" Name="Proj" PropertyName="Text" Type="String" /> 
      <asp:ControlParameter ControlID="txtJobT" Name="JobT" PropertyName="Text" Type="String" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 
    <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="False"> 
     <Columns> 
      <asp:BoundField DataField="Result" HeaderText="Result" ReadOnly="True" SortExpression="Result" /> 
     </Columns> 
    </asp:GridView> 

vb.net kodunun arkasında:

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    SqlDataSource1.Select(New DataSourceSelectArguments) 
End Sub 

Kodu bu değerlerle uyguladığımda ör.

@Dept = HR 
@Loca = Jeddah 
@proj = Andalus 
@JobT = JT2 

Güncellemeden sonra Qty'nin 4 olmasını bekledim ve 'İşlem Tamamlandı Tamamıyla Çalıştır'. ama güncellemeden sonra 3 aldım, ve bu, prosedürü çağırdığımda güncelleme ifadesinin iki kez çalıştırıldığı anlamına geliyor. Bu yüzden seninle çözümü bulmayı umuyorum.

cevap

1

Sorun, Sorgu sorgunuzun verilerinizi de güncellemesidir. Seçme sorgusu, yaşam döngüsü sırasında olduğundan, düğmeyi tıklattığınızda, azaltma işlemi iki kez yapılır: düğmesine bir kez tıklattığınızda olay işleyicisini tıklatın ve bir kez PreRender (ve muhtemelen formunuzu her açtığınızda QTY azalır) Button1 tuşuna basmazsınız. alacağı, hangi

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    SqlDataSource1.Update() 
    GridView1.DataBind() 
End Sub 

Başka Seç sorgu tanımlamak olabilir: Tıkladığınız anda

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:_JOOBERConnectionString %>" SelectCommandType="StoredProcedure" UpdateCommand="MManPowerUpdate"> 
    <UpdateParameters> 
     <asp:ControlParameter ControlID="txtDept" Name="Dept" PropertyName="Text" Type="String" /> 
     <asp:ControlParameter ControlID="txtLoca" Name="Loca" PropertyName="Text" Type="String" /> 
     <asp:ControlParameter ControlID="txtProj" Name="Proj" PropertyName="Text" Type="String" /> 
     <asp:ControlParameter ControlID="txtJobT" Name="JobT" PropertyName="Text" Type="String" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 

Ve diyoruz:

bir çözüm Güncelleme sorgusu olarak MManPowerUpdate tanımlamak olacaktır verileri değiştirip değiştirmeden GridView'i gösterin.

İlgili konular