Microsoft企业库数据访问应用程序块包含以下方法:
private static IDataParameter[] CreateParameterCopy(DbCommand command)
{
IDataParameterCollection parameters = (IDataParameterCollection)command.Parameters;
IDataParameter[] parameterArray = new IDataParameter[parameters.Count];
parameters.CopyTo(parameterArray, 0);
return CachingMechanism.CloneParameters(parameterArray);
}
如果command.Parameters
是TdParameterCollection(实现IDataParameterCollection
的Teradata .NET提供程序类),则parameters.CopyTo(parameterArray, 0)
会抛出InvalidCastException:"无法转换对象类型System.Data.IDataParameter []键入Teradata.Client.Provider.TdParameter []"。
我的第一个问题:
这是怎样以及为什么会发生这种情况?
异常消息表明参数已成功复制到parameterArray
,但之后尝试将parameterArray
从IDataParameter []转换为TdParameter []。 (无论如何,TdParameter实现了IDataParameter。)
我的第二个问题:
如何在不使用具体类型的情况下解决这个问题?
答案 0 :(得分:1)
问题出在CopyTo
方法的内部代码中。
MSDN说:
源ICollection的类型不能自动转换为目标数组的类型。
这意味着数组必须能够在没有显式转换的情况下进行转换。否则方法调用将失败。
您应该使用CopyTo
而不是使用foreach
,而是逐个手动复制。