2016-03-01 26 views
0

我有这些语句:在c#中执行SqlCommand.ExecuteNonQuery时如何获取数据库错误?

SqlCommand sqlcmd = new SqlCommand("some query", "some db connection"); 
sqlcmd.ExecuteNonQuery(); 

执行此查询时,如何从数据库中获取的消息?

例如,如果2行受到了影响,我想,说的SQL Server邮件:

1 row(s) affected 
1 row(s) affected 
在C#代码

。或者,例如,如果与主键有冲突,我的意思是我试图插入具有主键的行,该主键存在我想要接收数据库错误消息,该消息说:“主键重复”。

+2

的'SqlCommand.ExecuteNonquery()'函数已经为您提供了这个信息的'int'返回值。如果查询成功,您将得到受影响的行数。如果失败,比如主键错误......那么让我们只是说,你将无法获得该错误状态。 –

+0

你是什么意思:“你会没有问题得到那个错误条件”? – Svetoslav

+2

如果从数据库中有一个**异常**(一个致命错误) - 就像主键违例一样 - 那么当您捕获异常时,您会在Exception.Errors集合中获得所有细节 –

回答

6

可能的解决方案之一:

int rowsAffected = 0; 
bool HasErrors = false; 
try 
    { 
    SqlCommand sqlcmd = new SqlCommand("some query", "some db connection"); 
     rowsAffected= sqlcmd.ExecuteNonQuery(); 
    } 
    catch (System.Exception ex) 
    { 
    HasErrors=true; 
    MessageBox.Show(ex.message) 
    } 

    if (!HasErrors) 
    { 
    MessageBox.Show(rowsAffected.ToString() + " row(s) affected."); 
    } 
相关问题