Ошибка при использовании OleDB или ODBC в приложении C # - PullRequest
0 голосов
/ 25 сентября 2011

У меня есть приложение для Windows, и у меня есть этот код:

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'

Если я изменил OleDb в жирном коде в Odbc, я снова получу ошибку:

Ошибка 1 Не удается неявно преобразовать тип 'System.Data.Odbc.OdbcRowUpdatedEventHandler' в 'System.Data.OleDb.OleDbRowUpdatedEventHandler'

Ответы [ 3 ]

2 голосов
/ 25 сентября 2011

Полагаю, что полученное вами сообщение об ошибке довольно очевидно:

Не удается неявно преобразовать тип 'System.Data.Odbc.OdbcRowUpdatedEventHandler' в 'System.Data.OleDb.OleDbRowUpdatedEventHandler '

Итак, измените строку

void Adapter_RowUpdated(object sender,OdbcRowUpdatedEventArgs e) 

на

void Adapter_RowUpdated(object sender,OleDbRowUpdatedEventArgs e) 

Отредактировано, чтобы ответить на комментарий

Тогда я думаю, вы можете попробовать что-то вроде этого:

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;  
    }  
} 
1 голос
/ 25 сентября 2011

, если вы используете 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 
}

Вы можете легко создать событие в Visual Studio, дважды нажав клавишу Tab после ввода +=

0 голосов
/ 25 сентября 2011

Я думаю, ваш делегат должен быть статичным:

static void Adapter_RowUpdated(object sender,OdbcRowUpdatedEventArgs e)
...