撞上灵异事件了,IDbDataParameter[]强转SqlParameter[]失败了.
先前直接用new SqlParameter()时还好好的.一组员提供静态生成IDbDataParameter的方法以后就出错了.
他方法内部也就是利用反射机制 new SqlParameter() 再强转成 IDbDataParameter 返回而已.
且编译时也没有出错.运行时报错了..........
哪位老手能给个解释

解决方案 »

  1.   

    IDbDataParameter 只是接口....你把 生成IDbDataParameter[]的方法贴出来把.
      

  2.   

    SqlParameter继承自IDbDataParameter,但IDbDataParameter[]并不能直接转换为SqlParameter[]。
    虽然他们有继承关系,但是你要一个一个的转,例如:
    List<SqlParameter> pl = new List<SqlParameter>();
    foreach(IDbDataParameter ddp in ddps)
    {
        pl.Add(ddp);
    }类似这样的处理就不会有问题了。
      

  3.   

    例如,如下的代码,将不能执行:
    public IDbDataParameter getParameter(string name,SqlDbType type,string value)
            {
                SqlParameter sp = new SqlParameter(string.Format("@{0}", name), type, -1, value);
                return sp;
            }        private void button1_Click(object sender, EventArgs e)
            {
                List<IDbDataParameter> dbps = new List<IDbDataParameter>();
                dbps.Add(getParameter("customerid", SqlDbType.Int, "100222"));            SqlParameter[] sps = (SqlParameter[])dbps.ToArray();            foreach (SqlParameter sp in sps)
                {
                    MessageBox.Show(sp.ParameterName);
                }
            }
    而这样就可以:
    private void button1_Click(object sender, EventArgs e)
            {
                List<IDbDataParameter> dbps = new List<IDbDataParameter>();
                dbps.Add(getParameter("customerid", SqlDbType.Int, "100222"));            //SqlParameter[] sps = (SqlParameter[])dbps.ToArray();
                List<SqlParameter> sps = new List<SqlParameter>();
                foreach(IDbDataParameter dbp in dbps)
                {
                    sps.Add((SqlParameter)dbp);
                }            foreach (SqlParameter sp in sps)
                {
                    MessageBox.Show(sp.ParameterName);
                }
            }