2012-03-27 49 views
-6

我正在C#中创建一个以SQL Server作为后端的应用程序。我需要捕获SQL Server错误并在C#GUI上显示它。例如:(在SQL服务器中)我创建一个包含列ID,名称,年龄等的表,其中ID是主键,如果我在ID中插入相同的值两次SQL服务器会给出错误。我希望在C#GUI上显示这种错误,以便当用户通过C#表单将重复数据输入到SQL服务器中时,会自动生成一个错误。我需要这个,请代码... 感谢在C#和SQL中需要帮助

+0

那么,什么问题? – 2012-03-27 15:59:07

+2

问题在于,OP需要代码;) – gbianchi 2012-03-27 16:00:50

+0

在高层(因为在问题中没有代码,这是一个非常广泛的问题),您想要做的就是从您的数据访问代码中捕获异常并通过在用户界面中显示友好的错误来处理这些异常。更多信息在这里:http://msdn.microsoft.com/en-us/library/ms173160.aspx – David 2012-03-27 16:00:51

回答

2

典型的错误是由.NET类抛出......你真的需要你的问题

try 
{ 
    // ... 
    SqlCommand.ExecuteNonQuery(...); 
} 
catch(Exception ex) 
{ 
    MessageBox.Show(ex.ToString()); 
} 
1
try 
{ 
    //Run query here 
} 
catch(SqlException e) 
{ 
    MessageBox.Show(e.Message); 
} 
1
提供更多的代码或上下文

您需要捕获您可以使用异常尝试

try 
{ 
//Your command here 
} 
catch (Exception e) 
{ 
//Now you can use e.Message OR e.ToString() to get the message. 
} 
0

我想扩展Timmerz的答案,因为如果您自己显示异常,您可以看到整个堆栈跟踪。如果您湾东西短而精确的用户看到然后执行以下操作:

try 
{ 
    // ... 
    SqlCommand.ExecuteNonQuery(...); 
} 
catch(SqlException SqlEx) 
{ 
    string errMsg = String.Empty; 

    switch(SqlEx.number) 
    { 
    case 100: 
     errMsg = "blah blah blah"; 
     break; 
    case 200: 
     errMsg = "blah blah blah"; 
     break; 
    case 300: 
     errMsg = "blah blah blah"; 
     break; 

    } 

    if(!String.IsNullOrEmpty(errMsg)) 
    { 
    //If you want a pop up display message 
    MessageBox.Show(errMsg); 


    //If you want to display it on a label of a form 
    Form1.Labelx.text = errMsg; 
    } 


} 

对于SqlEx.number值,你可以创建一个枚举来检查它,或者你可以参考http://msdn.microsoft.com/en-us/library/cc645603.aspx所有从SQL服务器异常返回的可能数量。

希望这会有帮助