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放在原来的问题里而不是评论里吗?还要确保格式正确(使用工具栏)。否则我怀疑这个问题会被解决。