在C#应用程序中使用OleDB或ODBC时出错

时间:2011-09-25 16:49:14

标签: c# odbc oledb

我有一个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”的匹配

如果我在Odbc的粗体代码中更改OleDb,我又遇到了错误:

  

错误1无法将类型'System.Data.Odbc.OdbcRowUpdatedEventHandler'隐式转换为'System.Data.OleDb.OleDbRowUpdatedEventHandler'

3 个答案:

答案 0 :(得分:2)

我猜您收到的错误消息非常明显:

  

无法将类型'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 :(得分: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键两次键入+=

,轻松地在visual studio上生成事件

答案 2 :(得分:0)

我认为你的代表需要是静态的:

static void Adapter_RowUpdated(object sender,OdbcRowUpdatedEventArgs e)