C# IDataParameter InvalidCastException
Microsoft企业库数据访问应用程序块包含以下方法:C# IDataParameter InvalidCastException,c#,teradata,C#,Teradata,Microsoft企业库数据访问应用程序块包含以下方法: private static IDataParameter[] CreateParameterCopy(DbCommand command) { IDataParameterCollection parameters = (IDataParameterCollection)command.Parameters; IDataParameter[] parameterArray = new IDataParameter[par
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
是一个(实现IDataParameterCollection
的Teradata.NET提供程序类),则Parameters.CopyTo(parameterArray,0)
抛出InvalidCastException:“无法将System.Data.IDataParameter[]类型的对象强制转换为Teradata.Client.provider.TdParameter[]”
我的第一个问题:
这是怎么发生的,为什么发生的
异常消息表明参数已成功复制到parameterArray
,但随后有人试图将parameterArray
从IDataParameter[]转换为TdParameter[]。(在任何情况下,都应使用机具。)
我的第二个问题:
您知道如何在不使用具体类型的情况下解决此问题吗?问题在于该方法的内部代码 MSDN说: 无法将源ICollection的类型自动转换为目标数组的类型 这意味着数组必须能够在不进行显式转换的情况下进行转换。否则方法调用将失败 您不应该使用
CopyTo
,而应该使用foreach
并手动逐个复制它们