2012-04-03 10 views
0

Ich weiß, es könnte eine doppelte Frage sein, aber es macht mich wirklich frustriert jetzt. Ich muss insert/update Versender Informationen und ich schrieb dies eine gespeicherte Prozedur wie:Wenn vorhanden dann aktualisieren sonst einfügen nicht richtig in SQL Server Enterprise Edition

IF EXISTS (SELECT * FROM sysobjects WHERE name='usp_Nucleus_LSS_AddShipperInfo' AND type='P') 
    DROP PROCEDURE usp_Nucleus_LSS_AddShipperInfo 
GO 

CREATE PROCEDURE dbo.usp_Nucleus_LSS_AddShipperInfo 
(
    @ShipperCode varchar(500), 
    @ShipperName varchar(500), 
    @CustomsClearance decimal, 
    @MinCommissionAmount decimal, 
    @CommissionPercent decimal, 
    @TruckingAmount decimal, 
    @ContractNo varchar(50), 
    @ConsigneeName varchar(500), 
    @SalesPerson varchar(500), 
    @Email varchar(500), 
    @ContactNo varchar(500), 
    @ShipperPriority varchar(50), 
    @EntryBy varchar(50), 
    @EntryDate datetime, 
    @UpdatedBy varchar(50), 
    @UpdateDate datetime 
) 
AS 
DECLARE 
    @NewShipperID bigint, 
    @OldShipperID bigint 
BEGIN 
    SELECT @OldShipperID = (SELECT ISNULL(ShipperID, 0) AS ShipperID FROM LSS_t_ShipperInfo WHERE ShipperCode = @ShipperCode) 
    SELECT @NewShipperID = (SELECT ISNULL(MAX(ShipperID),0) AS ShipperID FROM LSS_t_ShipperInfo) 
    IF (@OldShipperID > 0) 
     BEGIN 
      UPDATE LSS_t_ShipperInfo SET [email protected], [email protected], 
      [email protected], [email protected], [email protected], 
      [email protected], [email protected], [email protected], [email protected], [email protected], 
      [email protected], [email protected], [email protected] 
      WHERE ShipperID = @OldShipperID 
     END 
    ELSE 
     BEGIN 
      INSERT INTO LSS_t_ShipperInfo (ShipperID, ShipperCode, ShipperName, CustomsClearance, MinCommissionAmount, 
      CommissionPercent, TruckingAmount, ContractNo, ConsigneeName, SalesPerson, Email, ContactNo, ShipperPriority, EntryBy, 
      EntryDate, UpdatedBy, UpdateDate) VALUES (@NewShipperID+1, @ShipperCode, @ShipperName, @CustomsClearance, @MinCommissionAmount, 
      @CommissionPercent, @TruckingAmount, @ContractNo, @ConsigneeName, @SalesPerson, @Email, @ContactNo, @ShipperPriority, @EntryBy, 
      @EntryDate, @UpdatedBy, @UpdateDate) 
     END 
END 

GO 

ich ausgeführt dies aus meiner Anwendung eine einzelne Zeile mit und es funktionierte. Aber wenn ich das nächste Mal wieder mit zwei Zeilen starte, fügt es weder Datensätze ein noch aktualisiert es sie. Ich verstehe nicht, was das Problem hier ist. Ich führe jede Abfrage getrennt und sie funktionieren gut. Hier ist mein VB.Net-Code:

oDBCmd.Connection = oDBCon 
       oDBCmd.CommandText = "usp_Nucleus_LSS_AddShipperInfo" 
       oDBCmd.CommandType = CommandType.StoredProcedure 
       oDBCmd.CommandTimeout = 0 
       nResult = -1 

       oDBCmd.Parameters.Add("@ShipperCode", OleDbType.VarChar).Value = DGMAIN.Rows(i).Cells("DGMAIN_SHIPPER_CODE").Value.ToString() 
       oDBCmd.Parameters.Add("@ShipperName", OleDbType.VarChar).Value = DGMAIN.Rows(i).Cells("DGMAIN_SHIPPER_NAME").Value.ToString() 
       oDBCmd.Parameters.Add("@CustomsClearance", OleDbType.Decimal).Value = DGMAIN.Rows(i).Cells("DGMAIN_CUSTOMS_CLEARANCE").Value.ToString() 
       oDBCmd.Parameters.Add("@MinCommissionAmount", OleDbType.Decimal).Value = DGMAIN.Rows(i).Cells("DGMAIN_MIN_COMMISSION_AMOUNT").Value.ToString() 
       oDBCmd.Parameters.Add("@CommissionPercent", OleDbType.Decimal).Value = DGMAIN.Rows(i).Cells("DGMAIN_COMMISSION_PERCENT").Value.ToString() 
       oDBCmd.Parameters.Add("@TruckingAmount", OleDbType.Decimal).Value = DGMAIN.Rows(i).Cells("DGMAIN_TRUCKING_AMOUNT").Value.ToString() 
       oDBCmd.Parameters.Add("@ContractNo", OleDbType.VarChar).Value = DGMAIN.Rows(i).Cells("DGMAIN_CONTRACT_NO").Value.ToString() 
       oDBCmd.Parameters.Add("@ConsigneeName", OleDbType.VarChar).Value = DGMAIN.Rows(i).Cells("DGMAIN_CONSIGNEE_NAME").Value.ToString() 
       oDBCmd.Parameters.Add("@SalesPerson", OleDbType.VarChar).Value = DGMAIN.Rows(i).Cells("DGMAIN_SALES_PERSON").Value.ToString() 
       oDBCmd.Parameters.Add("@Email", OleDbType.VarChar).Value = DGMAIN.Rows(i).Cells("DGMAIN_EMAIL").Value.ToString() 
       oDBCmd.Parameters.Add("@ContactNo", OleDbType.VarChar).Value = DGMAIN.Rows(i).Cells("DGMAIN_CONTACT_NO").Value.ToString() 
       oDBCmd.Parameters.Add("@ShipperPriority", OleDbType.VarChar).Value = DGMAIN.Rows(i).Cells("DGMAIN_SHIPPER_PRIORITY").Value.ToString() 
       oDBCmd.Parameters.Add("@EntryBy", OleDbType.VarChar).Value = System.Environment.UserName.ToString().ToUpper() 
       oDBCmd.Parameters.Add("@EntryDate", OleDbType.Date).Value = System.DateTime.Now().ToString() 
       oDBCmd.Parameters.Add("@UpdatedBy", OleDbType.VarChar).Value = System.Environment.UserName.ToString().ToUpper() 
       oDBCmd.Parameters.Add("@UpdateDate", OleDbType.Date).Value = System.DateTime.Now().ToString() 

       nResult = oDBCmd.ExecuteNonQuery() 

Ich benutze VB.Net 2.0 und SQL Server Enterprise Edition.

Vielen Dank im Voraus.

+0

vergessen zu erwähnen. Es ist SQL Server 2000 Enterprise Edition –

Antwort

2

Ich habe in Ihrer gespeicherten Prozedur aussehen, es sieht gut aus.

Ich denke, Sie haben ein Problem mit Ihrem vb.net-Code. Ich bezweifle, dass Sie die for-Schleife für die Ausführung mehrerer Zeilen Datentabelle fehlt.

diesen Code Versuchen Sie es hier:

For i As Integer = 0 To DGMAIN.Rows.Count - 1 
     oDBCmd = New SqlCommand 
     oDBCmd.Connection = oDBCon 
     oDBCmd.CommandText = "usp_Nucleus_LSS_AddShipperInfo" 
     oDBCmd.CommandType = CommandType.StoredProcedure 
     oDBCmd.CommandTimeout = 0 
     nResult = -1 

     oDBCmd.Parameters.Add("@ShipperCode", OleDbType.VarChar).Value = DGMAIN.Rows(i)("DGMAIN_SHIPPER_CODE").Value.ToString() 
     oDBCmd.Parameters.Add("@ShipperName", OleDbType.VarChar).Value = DGMAIN.Rows(i)("DGMAIN_SHIPPER_NAME").Value.ToString() 
     oDBCmd.Parameters.Add("@CustomsClearance", OleDbType.Decimal).Value = DGMAIN.Rows(i)("DGMAIN_CUSTOMS_CLEARANCE").Value.ToString() 
     oDBCmd.Parameters.Add("@MinCommissionAmount", OleDbType.Decimal).Value = DGMAIN.Rows(i)("DGMAIN_MIN_COMMISSION_AMOUNT").Value.ToString() 
     oDBCmd.Parameters.Add("@CommissionPercent", OleDbType.Decimal).Value = DGMAIN.Rows(i)("DGMAIN_COMMISSION_PERCENT").Value.ToString() 
     oDBCmd.Parameters.Add("@TruckingAmount", OleDbType.Decimal).Value = DGMAIN.Rows(i)("DGMAIN_TRUCKING_AMOUNT").Value.ToString() 
     oDBCmd.Parameters.Add("@ContractNo", OleDbType.VarChar).Value = DGMAIN.Rows(i)("DGMAIN_CONTRACT_NO").Value.ToString() 
     oDBCmd.Parameters.Add("@ConsigneeName", OleDbType.VarChar).Value = DGMAIN.Rows(i)("DGMAIN_CONSIGNEE_NAME").Value.ToString() 
     oDBCmd.Parameters.Add("@SalesPerson", OleDbType.VarChar).Value = DGMAIN.Rows(i)("DGMAIN_SALES_PERSON").Value.ToString() 
     oDBCmd.Parameters.Add("@Email", OleDbType.VarChar).Value = DGMAIN.Rows(i)("DGMAIN_EMAIL").Value.ToString() 
     oDBCmd.Parameters.Add("@ContactNo", OleDbType.VarChar).Value = DGMAIN.Rows(i)("DGMAIN_CONTACT_NO").Value.ToString() 
     oDBCmd.Parameters.Add("@ShipperPriority", OleDbType.VarChar).Value = DGMAIN.Rows(i)("DGMAIN_SHIPPER_PRIORITY").Value.ToString() 
     oDBCmd.Parameters.Add("@EntryBy", OleDbType.VarChar).Value = System.Environment.UserName.ToString().ToUpper() 
     oDBCmd.Parameters.Add("@EntryDate", OleDbType.Date).Value = System.DateTime.Now().ToString() 
     oDBCmd.Parameters.Add("@UpdatedBy", OleDbType.VarChar).Value = System.Environment.UserName.ToString().ToUpper() 
     oDBCmd.Parameters.Add("@UpdateDate", OleDbType.Date).Value = System.DateTime.Now().ToString() 

     nResult = oDBCmd.ExecuteNonQuery() 

    Next 

hoffen, dass dies für Sie hilfreich

+0

Ich habe diese Zeile in meiner for-Schleife verpasst: ** oDBCmd = New SqlCommand() ** Jetzt funktioniert es. Vielen Dank. –

+0

Also bitte als Antwort markieren :) –

Verwandte Themen