對資料庫操作產生的例外情況,可使用 SqlException
對資料庫操作產生的例外情況,可使用 SqlException
SqlException 類別 : 當 SQL Server 傳回警告或錯誤時所擲回的例外狀況。
以下顯示 SqlException 與 Exception 對於資料庫例外狀況所顯示的錯誤訊息。
private void Form1_Load(object sender, EventArgs e)
{
ShowSqlException("Data Source=127.0.0.1;Initial Catalog=ErrorDBName;User Id=ErrorID;Password=ErrorPWD;");
}
public static void ShowSqlException(string connectionString)
{
string queryString = "EXECUTE NonExistantStoredProcedure";
StringBuilder errorMessages = new StringBuilder();
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
try
{
command.Connection.Open();
command.ExecuteNonQuery();
}
//catch (SqlException ex) // 使用 SqlException
//{
// for (int i = 0; i < ex.Errors.Count; i++)
// {
// errorMessages.Append("Index #" + i + "\n" +
// "Message: " + ex.Errors[i].Message + "\n" +
// "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
// "Source: " + ex.Errors[i].Source + "\n" +
// "Procedure: " + ex.Errors[i].Procedure + "\n");
// }
// MessageBox.Show(errorMessages.ToString());
//}
catch (Exception ex) // 使用 Exception
{
MessageBox.Show(ex.ToString());
}
}
}
如果單純只用SqlException...錯誤代碼(Number屬性)只會包含第一個發生的錯誤代碼;錯誤訊息(Message屬性)則會串接所有錯誤訊息...
假設,同時執行多個指令,或者想要攔截每個錯誤,使用SqlException的SqlError成員是比較好的選擇。