2012-04-03 9 views
0

重複した質問かもしれませんが、実際には私は今や不満を感じています。私は挿入/荷主の情報を更新する必要があり、私はこのようにストアドプロシージャを書いた: 存在する場合は、SQL Server Enterprise Editionで正しく更新されていないinsert update

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 

が、私は単一の行を使用して私のアプリからこれを実行し、それが働きました。次回は2行を使って再度実行すると、レコードの挿入も更新もされません。私はここで何が問題なのか分かりません。私はそれぞれのクエリを別々に実行し、うまく動作します。私のVB.Netコードは次のとおりです。

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

私はVB.Net 2.0とSQL Server Enterprise Editionを使用しています。

ありがとうございます。

+0

に役立つ、この意志は言及を忘れてしまった

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 

希望を。 SQL Server 2000 Enterprise Edition –

答えて

2

私はあなたのストアドプロシージャを見て、その見栄えが良いです。

あなたのvb.netコードに問題があると思います。私はあなたがdatatableの複数の行を実行するためのforループが欠けているとは思わない。

ここにこのコードを試してください:あなた

+0

私のforループでこの行を見逃しました:** oDBCmd = New SqlCommand()**今すぐ動作します。ありがとう。 –

+0

それは答えとしてマークしてください:) –

関連する問題