撞上灵异事件了,IDbDataParameter[]强转SqlParameter[]失败了.
先前直接用new SqlParameter()时还好好的.一组员提供静态生成IDbDataParameter的方法以后就出错了.
他方法内部也就是利用反射机制 new SqlParameter() 再强转成 IDbDataParameter 返回而已.
且编译时也没有出错.运行时报错了..........
哪位老手能给个解释
先前直接用new SqlParameter()时还好好的.一组员提供静态生成IDbDataParameter的方法以后就出错了.
他方法内部也就是利用反射机制 new SqlParameter() 再强转成 IDbDataParameter 返回而已.
且编译时也没有出错.运行时报错了..........
哪位老手能给个解释
虽然他们有继承关系,但是你要一个一个的转,例如:
List<SqlParameter> pl = new List<SqlParameter>();
foreach(IDbDataParameter ddp in ddps)
{
pl.Add(ddp);
}类似这样的处理就不会有问题了。
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);
}
}