函数如下,求大虾帮忙看一下什么错误,谢谢了:
public DataSet GetProcessMasterIDByPartID(long partRevisionID)//注明partRevisionID=194;
{
OracleParameter[] parameters={
new OracleParameter("p_CURSOR",OracleType.Cursor,2000,ParameterDirection.Output,true,0,0,"",
DataRowVersion.Default,Convert.DBNull),
new OracleParameter("p_CPDH",OracleType.NVarChar,30)
}; parameters[1].Value = Convert.ToString(partRevisionID);
return(RunProcedure("GetProcessMasterIDByCPDH",parameters,"gongyixinxi"));
}protected DataSet RunProcedure(string storedProcName,IDataParameter[] parameters, string tableName)
{
DataSet dataSet = new DataSet();
if(Connection.State.ToString() == "Open")
Connection.Close();
Connection.Open();
OracleDataAdapter sqlDA = new OracleDataAdapter(); sqlDA.SelectCommand = BuildQueryCommand(storedProcName,parameters);
sqlDA.Fill(dataSet,tableName); Connection.Close();
return dataSet;
}private OracleCommand BuildQueryCommand(string storedProcName,IDataParameter[] parameters)
{
OracleCommand command = new OracleCommand(storedProcName, Connection);
command.CommandType = CommandType.StoredProcedure ; foreach(OracleParameter parameter in parameters)//出错
{
command.Parameters.Add(parameter);      //出错
} return command;
}数据库里的字段都是nvarchar2,存储过程也是,程序包也建了,别的页面都可以显示,说明可以走得通;
报错信息:
System.InvalidCastException: 指定的转换无效。 at BITPDM.Data.DbObject_Oracle.BuildQueryCommand(String storedProcName, IDataParameter[] parameters) in E:\BITPDM\Modules\Core\DbObject_Oracle.cs:line 72 at BITPDM.Data.DbObject_Oracle.RunProcedure(String storedProcName, IDataParameter[] parameters, String tableName) in E:\BITPDM\Modules\Core\DbObject_Oracle.cs:line 124 at BITPDM.CAPPdb.Data.ProcessMasters.GetProcessMasterIDByPartID(Int64 partRevisionID) in e:\bitpdm\modules\bitpdm.cappdb\bitpdm.cappdb.data\processmasters.cs:line 400 at BITPDM.CAPPdb.Business.ProcessMaster.GetProcessMasterByPartID(Int64 partRevisionID) in E:\BITPDM\Modules\BITPDM.CAPPdb\CAPPdb.Business\ProcessMaster.cs:line 467 at BITPDM.Web.Modules.Mfg.ProcessTree.FillProcessMasterTree(TreeNode node, Int64 partRevisionID) in E:\BITPDM\BITPDM.Web\Modules\Mfg\ProcessTree.aspx.cs:line 97 at BITPDM.Web.Modules.Mfg.ProcessTree.FillStructureTree() in E:\BITPDM\BITPDM.Web\Modules\Mfg\ProcessTree.aspx.cs:line 92 
at BITPDM.Web.Modules.Mfg.ProcessTree.Page_Load(Object sender, EventArgs e) in E:\BITPDM\BITPDM.Web\Modules\Mfg\ProcessTree.aspx.cs:line 48 at System.EventHandler.Invoke(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain()

解决方案 »

  1.   

    System.InvalidCastException: 指定的转换无效。自己看看参数
      

  2.   

    IDataParameter!=OracleParameter
    前面的参数进来,和后面的foreach不一致
    转换无效
      

  3.   

    回复人: xxuu503(2005年CSDN MVH(Most Valuable Hemorrhoiders)) ( ) 信誉:100  2005-03-28 19:42:00  得分: 0  
     
     
       如果参数没有初始化值的话,也会产生转换无效的可能?那该怎么办?
     
     
      

  4.   

    OracleParameter[] parameters={
    new OracleParameter("p_CURSOR",OracleType.Cursor,2000,ParameterDirection.Output,true,0,0,"",
    DataRowVersion.Default,Convert.DBNull),
    new OracleParameter("p_CPDH",OracleType.NVarChar,30)
    }; parameters[1].Value = Convert.ToString(partRevisionID);
    return(RunProcedure("GetProcessMasterIDByCPDH",parameters,"gongyixinxi"));第一个参数是输出参数,初始值为DBNull,可是别的都可以转换,只有其中一个不可以转换,
    怎么回事?
    我从.net2002升级到2003,别的都可以显示页面,只有其中一个现实不了,怎么回事?