2011-10-08 6 views
0

다음 코드는 예외입니다. 이 코드에서 잘못된 점이 무엇인지 말해 주실 수 있습니까? 양식을 여는 데 시간이 걸립니다. catch 블록의 메시지 상자는 양식을 열기 전에 표시됩니다. 내 데이터베이스가 실행 중이지만 왜 원활하게 실행되지 않는지 알 수 없습니다. 안내하시기 바랍니다 ...양식을 열기 전에 알 수없는 예외가 발생합니다.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace IMS 
{ 
public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    // To set up a connection object 
    System.Data.SqlClient.SqlConnection con; 
    System.Data.OleDb.OleDbDataAdapter da; 
    private void Form2_Load(object sender, EventArgs e) 
    { 
     con = new System.Data.SqlClient.SqlConnection(); 
     // TODO: This line of code loads data into the 'iMSDataSet1.Part_Group' 
     //table. You can move, or remove it, as needed. 
     this.part_GroupTableAdapter.Fill(this.iMSDataSet1.Part_Group); 


     con.ConnectionString = "Data  Source=.\\DataDirectory\\IMS.sdf;Password=ims;Persist Security Info=True"; 
     //open up a connection to the database 
     try 
     { 
      con.Open(); 
     } 
     catch 
     { 
      MessageBox.Show("Database Exception"); 
     } 
     //Close up a connection to the database 
     con.Close(); 

    } 

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 

    } 

    private void AddPartGroup_Click(object sender, EventArgs e) 
    { 
     System.Data.OleDb.OleDbCommandBuilder cb; 
     cb = new System.Data.OleDb.OleDbCommandBuilder(da); 

     //DataRow dRow = 
    } 
} 
} 

답변

7

글쎄, 당신은 당신이 예외를 처리하는 방법을 변경해야합니다. 이것 :

catch 
{ 
    MessageBox.Show("Database Exception"); 
} 

은별로 유용하지 않습니다. 단지 예외를 잡는 것일뿐만 아니라 (특정 것 대신). 그것은 예외 자체를 무시하고 있습니다. 당신이 잘못 무슨 일이 해결 도움이 될 것입니다

catch(Exception e) 
{ 
    MessageBox.Show("Database Exception: " + e.Message); 
    // Now log e.ToString() somewhere as well 
} 

: 적어도, 같은 것을 사용합니다. 제쳐두고, 나는 이 아니며은 UI 스레드에서 데이터베이스 작업을 수행해야합니다. 보통은 특정 예외를 잡을뿐입니다. 그러나 가장 즉각적인 변화는 throw되는 예외에서 유용한 정보를 무시하는 것입니다. .

예외를 잡은 후에도 아무 문제가없는 것처럼 계속 진행됩니다. 사실이 경우에는 치명적인 오류가 발생할 수 있으며 응용 프로그램의 나머지 부분은 꽤 실패 할 것입니다. 곧 그 후. 깨진 상태로 계속하기보다는 응용 프로그램을 강제 종료해야합니다 (적절한 설명과 함께). (다른 옵션은 실패한 작업을 다시 시도하는 것을 포함합니다. 중요한 것은 모든 것이 정상인 것만 큼 계속하지 않는 것입니다.)

+0

답장을 보내 준 Jon에게 감사드립니다. 다음 오류가 발생하여 예외가 발생했습니다. _ "데이터베이스 예외 SQL Server에 연결하는 동안 네트워크 관련 또는 인스턴스 관련 오류가 발생했습니다. 서버를 찾을 수 없거나 액세스 할 수 없습니다. 인스턴스 이름이 올바른지, SQL Server가 올바른지 확인하십시오. (공급자 : SQL 네트워크 인터페이스, 오류 : 26- 오류 찾기 서버/인스턴스 지정됨) "_ 이 자습서에서 읽는 중입니다. http://www.homeandlearn.co.uk/csharp/csharp_s12p3.html . 그게 무슨 뜻인지 알 겠어? 내가 뭘해야 해? – m3nhaq

+0

ConnectionString이 올바르지 않은 것처럼 보입니다 ... –

+0

@ m3nhaq : 예외는 사용자가해야 할 일을 정확하게 알려줍니다. 인스턴스 이름이 올바른지, SQL Server가 원격 연결을 허용하도록 구성되었는지 확인하십시오. SQL Studio는 지정한 연결 문자열을 사용하여 탐색 할 수 있습니까? 기본적으로 데이터베이스에 연결하는 법을 배우기 전까지는 아무 것도 할 수 없으며 실제 코드 *와 관련이 없습니다. –

관련 문제