未经类似的数据集参数不接受C#中的键入数据集

  • 本文关键字:数据集 不接受 参数 c#
  • 更新时间 :
  • 英文 :


我们有一个dataAccess层,它具有一个带有未型数据集的函数的接口。当我们将键入数据集从实体层传递到DataAccess层时,我们会遇到错误。请帮助解决错误。

代码:

public interface diNonTransactional
{
    int ExecuteDataAdapterDataTableWithParams(IDbCommand podbCommand, ref DataTable pdtDataTable);
}

下面的功能正在解决我的问题,但我不知道如何在dataAccess层中实现该功能。请帮助我如何实现。

新代码

int ExecuteDataAdapterDataTableWithParams<T>(IDbCommand podbCommand, ref T pdtDataTable) where T :` DataTable;

我的旧插入:

public int ExecuteDataAdapterDataTableWithParams(IDbCommand podbCommand, ref DataTable pdtDT)
{
IDataAdapter ldaDataAdapter = default(IDataAdapter);
IDbTransaction lodbTrans = default(IDbTransaction);
int liFetchedRows = 0;
lodbTrans = EstablishConnection();
try
{
podbCommand.Connection = coConnection;
podbCommand.Transaction = lodbTrans;
ldaDataAdapter = GetDataAdapter(ref podbCommand);
ldaDataAdapter.TableMappings.Add("Table",  pdtDT.TableName);
liFetchedRows = ldaDataAdapter.Fill(pdtDT.DataSet);
}
catch (Exception ex)
{
throw (ex);
}
finally
{
CloseConnection(ref lodbTrans);
}
return liFetchedRows;
}

这里的问题是该参数被声明为'ref'。当声明参数为"参考"时,则意味着可以将新对象传递给该方法并分配给原始变量。如果您想传递键入的数据表,则原始变量是该类型。由于该参数仅简单地将其声明为类型数据词,这意味着您可以传递一个未型数据的数据,并且无法将其分配给键入的DataTable变量,因此编译错误。如果必须将参数声明为" ref",因为您想从该方法中传递对象,则无法在其架起的情况下传递到键入的数据表中。您将必须制作方法通用方法,并在该通用类型参数上放置一个限制:

public interface diNonTransactional
{
    int ExecuteDataAdapterDataTableWithParams<TDataTable>(IDbCommand podbCommand, ref TDataTable pdtDataTable)
        where TDataTable : DataTable;
}

当然,您需要能够提供可以处理它的实现。可能是一个更好的选择是使接口通用,然后在声明实现它的类时可以修复TDATAT的类型。

最新更新