如何通过一次调用稍后从数据中获取不同的TableAdapter

时间:2017-06-08 15:28:59

标签: c# datatable sqldataadapter

我希望有一个相当通用的方法,它循环通过数据表来处理我正在使用的表中的每个记录。 TableAdapter和Datatables是强类型的,并在XSD设计器中创建。数据表可以是要处理的6个不同实际表中的任何一个。如果我在这个方法中创建tableadapter和datatable,一切正常......

    var eventsToProcessTableAdapter = new NoticesData.CobraNoticesTableAdapters.COBRAEventsTableAdapter();
    var eventsToProcessDataTable = eventsToProcessTableAdapter.GetPDFsToProcess();

        foreach (DataRow currentRow in eventsToProcessDataTable.Rows) {

                     // Do some processing...

                      currentRow[("pdfDate")] = currDateTime;
                      eventsToProcessTableAdapter.Update(eventsToProcessDataTable);

        }

但是,我不想在这个方法中创建所有tableadapters和datatables - 本质上,我想调用datalayer来获取我想要使用的表。所以,我想要做的是将此代码移动到另一个方法,并返回我正在使用的特定事件适配器/表组合,如下所示:

var eventsToProcessTableAdapter = oRptQuery.getEventsDataAdapter(eventTableName, 0);
var eventsToProcessDataTable = eventsToProcessTableAdapter.GetPDFsToProcess();

在getEventsDataAdapter方法中,我有一个switch语句,我基本上想要为我正在处理的特定表返回dataadapter。这样,我就不必在外部方法中创建所有6个数据适配器/表,我可以将数据创建抽象到数据层。

public SqlDataAdapter getEventsDataAdapter(string evtTable, Int32 empID) {

var eventsDataAdapter = new SqlDataAdapter();

... (more code)...

                switch (evtTable)
                {
                    case "EvtCOBRA":
                        eventsDataAdapter = new NoticesData.CobraNoticesTableAdapters.COBRAEventsTableAdapter();
                        break;

... (more code)...

但是,当我尝试这样做时,我遇到了一些错误。在泛型方法中,Visual Studio告诉我SqlDataAdapter不包含GetPDFsToProcess的定义。在我的getEventsDataAdapter方法中,它表示我不能将类型NoticesData.CobraNoticesTableAdapters.COBRAEventsTableAdapter隐式转换为System.Data.SqlClient.SqlDataAdapter。

我无法更改数据设计,因此请在不影响后端表设计的情况下建议备用解决方案。我尝试使用接口将GetPDFsToProcess()方法应用于getEventsDataAdapter返回的适配器,但我没有成功。那么,如何在不创建这些错误的情况下将dataadapter创建移动到另一个方法呢?

0 个答案:

没有答案