Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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
C# 如何停止插入?_C#_Sql_Sql Server - Fatal编程技术网

C# 如何停止插入?

C# 如何停止插入?,c#,sql,sql-server,C#,Sql,Sql Server,如果该值已经存在,我将如何停止循环 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[SD_Sproc_Result] -- Add the parameters for the stored procedure here @employeeid bigint, @providercode varchar(100) AS BEGIN IF NOT EXISTS

如果该值已经存在,我将如何停止循环

set ANSI_NULLS ON    
set QUOTED_IDENTIFIER ON    
GO

ALTER PROCEDURE [dbo].[SD_Sproc_Result]     
-- Add the parameters for the stored procedure here
    @employeeid bigint,
    @providercode varchar(100)
AS
BEGIN

  IF NOT EXISTS(SELECT * 
                  FROM TR_employeesprovidercode    
                 WHERE employeeid = @employeeid
                  AND providercode = @providercode)
  BEGIN
      Insert into TR_employeesprovidercode 
        (employeeid, providercode) 
      values 
        (@employeeid, @providercode)
  END

END
C#代码

这是我的C#代码


ELSE
部分添加到存储的进程并返回一些常量

IF NOT EXISTS
 BEGIN   
   ...   
 END
ELSE
 RETURN 0;
在循环中检查返回值并从循环中断

foreach(var item in myArray)
{
    SqlCommand cmd = new SqlCommand(); // command for stored proc
    ...
    var result = cmd.ExecuteScalar();

    if(result == 0)
       break;
}

ELSE
部分添加到存储的进程并返回一些常量

IF NOT EXISTS
 BEGIN   
   ...   
 END
ELSE
 RETURN 0;
在循环中检查返回值并从循环中断

foreach(var item in myArray)
{
    SqlCommand cmd = new SqlCommand(); // command for stored proc
    ...
    var result = cmd.ExecuteScalar();

    if(result == 0)
       break;
}

您可以在存储过程中使用和输出参数,并在条目重复时填充该值。然后测试参数,如果该值已经存在,则中断循环


MySql教程介绍了这一点。

您可以在存储过程中使用和输出参数,并在条目重复时填充值。然后测试参数,如果该值已经存在,则中断循环


MySql教程对此进行了介绍。

您需要从存储过程返回一个可以检查的值,然后
在适当的返回值上中断循环。

您需要从存储过程返回一个可以检查的值,然后在适当的返回值上断开循环。

首先不存在的循环不能很好地扩展,您仍然可以得到重复的错误

为什么不试试这样的

...
DECLARE @rtn int
BEGIN TRY
  Insert into TR_employeesprovidercode 
    (employeeid, providercode) 
  values 
    (@employeeid, @providercode)
  SET @rtn = 0
BEGIN TRY
BEGIN CATCH
  IF ERROR_NUMBER() <> 2627
     RAISERROR ('real error', 16, 1)
  SET @rtn = 1
END CATCH
RETURN @rtn
。。。
声明@rtn int
开始尝试
在TR_员工提供代码中插入
(员工ID,提供者代码)
价值观
(@employeeid,@providercode)
设置为@rtn=0
开始尝试
开始捕捉
如果出现错误_编号()2627
RAISERROR('真实错误',16,1)
设置为@rtn=1
端接
返回@rtn

首先不存在的错误无法很好地扩展,您仍然可以得到重复的错误

为什么不试试这样的

...
DECLARE @rtn int
BEGIN TRY
  Insert into TR_employeesprovidercode 
    (employeeid, providercode) 
  values 
    (@employeeid, @providercode)
  SET @rtn = 0
BEGIN TRY
BEGIN CATCH
  IF ERROR_NUMBER() <> 2627
     RAISERROR ('real error', 16, 1)
  SET @rtn = 1
END CATCH
RETURN @rtn
。。。
声明@rtn int
开始尝试
在TR_员工提供代码中插入
(员工ID,提供者代码)
价值观
(@employeeid,@providercode)
设置为@rtn=0
开始尝试
开始捕捉
如果出现错误_编号()2627
RAISERROR('真实错误',16,1)
设置为@rtn=1
端接
返回@rtn

foreach(ArrData中的ArrayList项){providercode=201110001;oProviderDetail=“HCS”;DBInterface ProviderDetail=new DBInterface();ProviderDetail.InsertProvider(Convert.ToInt64(providercode),Convert.ToString(oProviderDetail));}是的。一个循环丢失了;)它是白色字体吗?我没有在上面的代码中看到它?这是我的c代码。对不起,伙计们!我忘了。十) @man:你能把你的C#code放在原来的问题里而不是评论里吗?还要确保格式正确(使用工具栏)。否则我怀疑这个问题会被解决。foreach(ArrData中的ArrayList项){providercode=201110001;oProviderDetail=“HCS”;DBInterface ProviderDetail=new DBInterface();ProviderDetail.InsertProvider(Convert.ToInt64(providercode),Convert.ToString(oProviderDetail))是的。一个循环丢失了;)它是白色字体吗?我没有在上面的代码中看到它?这是我的c代码。对不起,伙计们!我忘了。十) @man:你能把你的C#code放在原来的问题里而不是评论里吗?还要确保格式正确(使用工具栏)。否则我怀疑这个问题会被解决。