2011-11-10 73 views
0

我試圖噸的可能辦法,但都無濟於事,現在我已經「OledbException是未處理」試圖捕獲和拋出異常。請指教謝謝!C#OledbException被處理錯誤

(假設新的數據輸入都是字符串不是整數。)

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

    private void Form2_Load(object sender, EventArgs e) 
    { 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     //connect to database 
     string strOleDbConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Project.mdb"; 
     OleDbConnection objConnection = new OleDbConnection(strOleDbConnectionString); 

     objConnection.Open(); 
     string newTagID = textBox1.Text; 
     string newUser = textBox2.Text; 
     string newAge = textBox3.Text; 
     string newPhoneNumber = textBox4.Text; 

     string InsertNewRecord = "INSERT INTO jiahe ([Tag ID], [User], [Age], [Phone Number]) VALUES ('" + newTagID + "', '" + newUser + "', '" + newAge + "', '" + newPhoneNumber + "')"; 
     OleDbCommand InsertCommand = new OleDbCommand(InsertNewRecord, objConnection); 

     try 
     { 
      InsertCommand.Parameters.Add("@[Tag ID]", newTagID); 
      InsertCommand.Parameters.Add("@[User]", newUser); 
      InsertCommand.Parameters.Add("@[Age]", newAge); 
      InsertCommand.Parameters.Add("@[Phone Number]", newPhoneNumber); 
      InsertCommand.ExecuteNonQuery(); 

      MessageBox.Show("Record Added!"); 
     } 

     catch (OleDbException ex) 
     { 
      throw ex; 
     } 

     finally 
     { 
      objConnection.Close(); 
     } 
    } 
} 

}

+0

什麼行會拋出錯誤? – Mark

+0

catch(OleDbException ex) throw ex; } –

+0

如何當我嘗試輸入整數一切工作正常?我認爲它應該是一個字符串,當我包裝用戶,年齡等與''? –

回答

1

你的問題是:爲什麼你得到 「OledbException是未處理」。

所以你的問題的答案(但不是你的問題)是你用throw拋出一個異常。取而代之的是,這樣做:

MessageBox.Show(ex.ToString()); 

,會告訴你什麼是你的代碼背後的真正的錯誤,你將不得不處理的異常。

的oleDBException大概來,因爲你應該使用下列定義SQL命令:

string InsertNewRecord = "INSERT INTO jiahe ([Tag ID], [User], [Age], [Phone Number]) VALUES (?newTagID, ?newUser, ?newAge,?newPhoneNumber)"; 

然後代碼的其餘部分將設置這些實際值替換@xxx的命令參數。 AddParameter會添加引號,所以你不需要。

+1

OleDb使用位置而不是命名參數。 「@__」的名字應該是「?」代替。而且,參數的一個關鍵特性是通過說其他代碼將替換命令中的「@xxx」來表徵它們是錯誤的。這_NEVER_發生。而是將單獨的塊傳輸到服務器以獲取代碼和數據。這是使參數安全的原因。 –

+0

感謝您指出這一點,將@s替換爲?s。 – zmilojko

+0

喬爾你的意思是用@替換@?或?xxx? –