Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如果存在,则更新else insert在SQL Server企业版中无法正常工作_Sql Server_Vb.net_Sql Server 2000 - Fatal编程技术网

Sql server 如果存在,则更新else insert在SQL Server企业版中无法正常工作

Sql server 如果存在,则更新else insert在SQL Server企业版中无法正常工作,sql-server,vb.net,sql-server-2000,Sql Server,Vb.net,Sql Server 2000,我知道这可能是一个重复的问题,但现在我真的很沮丧。我必须插入/更新发货人信息,并编写了如下存储过程: 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_AddShipperIn

我知道这可能是一个重复的问题,但现在我真的很沮丧。我必须插入/更新发货人信息,并编写了如下存储过程:

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 ShipperName=@ShipperName, CustomsClearance=@CustomsClearance, 
            MinCommissionAmount=@MinCommissionAmount, CommissionPercent=@CommissionPercent, TruckingAmount=@TruckingAmount, 
            ContractNo=@ContractNo, ConsigneeName=@ConsigneeName, SalesPerson=@SalesPerson, Email=@Email, ContactNo=@ContactNo, 
            ShipperPriority=@ShipperPriority, UpdatedBy=@UpdatedBy, UpdateDate=@UpdateDate 
            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 
我用一行代码从我的应用程序中执行了这个命令,它成功了。但下次我再次使用两行运行它时,它既不会插入也不会更新记录。我不明白这里有什么问题。我分别运行每个查询,它们工作正常。以下是我的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.NET2.0和SQLServer企业版


提前谢谢。

我已经查看了您的存储过程,它看起来不错

我想你的vb.net代码有问题。我怀疑您缺少执行多行datatable的for循环

请在此处尝试以下代码:

    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企业版。我在for循环中漏掉了这一行:oDBCmd=New SqlCommand()现在可以工作了。谢谢