2011-09-25 69 views
0

我有一個Windows應用程序,我有這樣的代碼:錯誤使用C#應用OLEDB或ODBC時

private void saveToDatabase_Click(object sender, EventArgs e) 
{ 
    // Save the DataSet Appointments table to the database. 
    KaznetiTableAdapter ta = new KaznetiTableAdapter(); 
    ta.Adapter.RowUpdated += new OleDbRowUpdatedEventHandler(Adapter_RowUpdated); 
    ta.Update(kbDataSet.Kazneti); 
} 

void Adapter_RowUpdated(object sender,OdbcRowUpdatedEventArgs e) 
{ 
    if (e.RecordsAffected == 0) 
    { 
     MessageBox.Show(
      e.Row["Adresa"].ToString() 
      "Optimistic Concurrency Error - Notes Not Saved", 
      MessageBoxButtons.OK, 
      MessageBoxIcon.Warning 
     ); 
     e.Status = UpdateStatus.SkipCurrentRow; 
    } 
} 

我得到的錯誤消息:

錯誤1無過載關於 'Adapter_RowUpdated'比賽代表「System.Data.OleDb.OleDbRowUpdatedEventHandler」

如果我在ODBC粗體代碼我又得到了一個錯誤改變OLEDB:

錯誤1無法隱式轉換類型 'System.Data.Odbc.OdbcRowUpdatedEventHandler' 到 'System.Data.OleDb.OleDbRowUpdatedEventHandler'

+0

什麼是'KaznetiTableAdapter'和它的'Adapter'容易產生視覺工作室事件?你可以顯示代碼嗎? – Damith

回答

0

我覺得你的委託需要是靜態的:

static void Adapter_RowUpdated(object sender,OdbcRowUpdatedEventArgs e) 
+0

如果我把靜態放在void之前沒有任何變化 – user963833

+0

確保你在使用OleDbRowUpdatedEventHandler和OdbcRowUpdatedEventArgs。 – Blazes

2

我猜你得到的錯誤信息是很明顯的:

不能隱轉換型 'System.Data.Odbc.OdbcRowUpdatedEventHandler' 到 'System.Data.OleDb.OleDbRowUpdatedEventHandler'

所以,改線

void Adapter_RowUpdated(object sender,OdbcRowUpdatedEventArgs e) 

void Adapter_RowUpdated(object sender,OleDbRowUpdatedEventArgs e) 

編輯回答評論

然後我t hink你可以嘗試這樣的事:

ta.Adapter.RowUpdated += (sender, e) => 
{ 
    if (e.RecordsAffected == 0) 
    { 
     MessageBox.Show( 
      e.Row["Adresa"].ToString() 
      "Optimistic Concurrency Error - Notes Not Saved", 
      MessageBoxButtons.OK, 
      MessageBoxIcon.Warning); 
     e.Status = UpdateStatus.SkipCurrentRow; 
    } 
} 
+0

我已經這樣做了,並且我得到了以下消息: 錯誤'Adapter_RowUpdated'沒有重載匹配委託'System.Data.Odbc.OdbcRowUpdatedEventHandler' – user963833

1

如果您使用OleDbDataAdapter的

adapter.RowUpdating += new OleDbRowUpdatingEventHandler(OnRowUpdating); 

創建處理程序

protected static void OnRowUpdating(object sender, 
    OleDbRowUpdatingEventArgs args) 
{ 
    // code 
} 

如果您使用的SqlDataAdapter

adapter.RowUpdating += new SqlRowUpdatingEventHandler(OnRowUpdating); 

創建處理程序

private static void OnRowUpdating(object sender, SqlRowUpdatingEventArgs e) 
{ 
     // code 
} 

您可以按tab鍵兩次,那些你鍵入+=