我们有一个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的类型。