C# C语言中的更新错误处理#

C# C语言中的更新错误处理#,c#,sql-server,C#,Sql Server,我在sqlserver中有一个customer表,其中包含一个rowversion字段,每次更新记录时,我都会将其递增, 我只是想和你核实一下 if(Customer.rowversion=@roeversion ) where customerID=@customerID 执行更新 else RAISERROR('Update cannot be executed. There is a row version conflict.', 16, 1) 因此,现在必须从我的c#代码中传递一个参

我在sqlserver中有一个customer表,其中包含一个
rowversion
字段,每次更新记录时,我都会将其递增, 我只是想和你核实一下

if(Customer.rowversion=@roeversion ) where customerID=@customerID
执行更新

else RAISERROR('Update cannot be executed. There is a row version conflict.', 16, 1)
因此,现在必须从我的c#代码中传递一个参数并返回错误值。而且 -获取刚刚执行的语句的错误代码

SELECT @ErrorCode=@@ERROR

那么,我应该如何将SQLSERVER更新查询中的值返回到我的c#代码中,以便显示消息。

如果您通过ado.NET调用存储过程,那么传递给存储过程的SqlParameter将如下设置:

SqlParameter P = new SqlParameter("Name of your column", SqlDbType.Int);
P.Direction = ParameterDirection.Output;

//call your sproc
int result = (int)P.Value;
编辑


由于您使用的是Linq to SQL,因此将此存储过程添加到“方法”部分应该会为此存储过程创建一个c方法签名,并为您添加out参数

如果尚未添加,则应将数据库代码保存在存储过程中。存储过程看起来像:

CREATE PROCEDURE s_my_procedure
  @RowVersion    int ,
  @CustomerID    int ,
  ... additional fields here
  @ErrorCode     INT OUTPUT
AS
  IF EXISTS(SELECT 1
              FROM Customer
             WHERE RowVersion = @RowVersion
               AND CustomerID = @CustomerID)
    BEGIN
      UPDATE Customer
         SET ...
       WHERE RowVersion = @RowVersion
         AND CustomerID = @CustomerID

      SET @ErrorCode = 0
    END 
  ELSE
    BEGIN
      SET @ErrorCode = 1234 -- Something meaningful to your app
    END
您应该尽可能避免引起错误

然后,假设您有一个由命令执行的存储过程:

cmd.ExecuteNonQuery();

int ErrorCode = 0;

// Note that if you are not sure about your sp, you should test this for dbnull.value first
ErrorCode = Convert.ToInt32(cmd.Parameters["@ErrorCode"].Value);

我通过DBML db.usp_UpdateCustomer调用存储过程(CustomerID、FirstName、MiddleName、LastName、Title、Active、SeeNote、UserId、RowVersion);那么在这种情况下,我应该如何返回。哦!如果您使用的是LINQtoSQL,那么当您将存储过程加载到方法资源管理器中时,它应该为您定义一个out参数,您能告诉我怎么做吗that@user1078389-这个链接应该对你来说是个好消息!记住,如果一个答案解决了或者帮助你解决了你的问题,你应该点击答案旁边的复选标记和向上箭头,让未来的访问者知道它帮助了你。我还有一件事要问。。。要返回的实际错误代码值应该是多少。如果该值大于1200,或者sql错误将返回负值,那么如何处理该值??错误代码可以是您想要的任何值,因为它没有经过sql Server异常处理过程。我们的做法是使用负数表示错误,正数表示警告,但您可以选择任何您想要的方案。