您好,我遇到问题我无法找到解决方案,在我的笔记本电脑中一切正常,但在服务器上它给了我这个错误:"
错误讯息:
System.InvalidCastException:指定的强制转换无效。在 System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value)at System.Data.DataRowExtensions.Field [T](DataRow row,String columnName) 在Blue.Adesao.GetAdesoes(SqlConnection conexao,SqlTransaction trans) 在listagem_form_obras.GetAdesoes()"
关于以下功能:
public static DataTable GetAdesoes ( SqlConnection conexao, SqlTransaction trans ) {
SqlCommand comando;
String sql;
sql = "SELECT id, data_criacao, nome, nif, telefone, email, valido " +
"FROM forms_adesao_entidade ";
comando = new SqlCommand(sql, conexao, trans);
SqlDataAdapter dtadapter = new SqlDataAdapter(comando);
DataTable dt = new DataTable();
dtadapter.Fill(dt);
dt.Columns.Add("dataFormatada", System.Type.GetType("System.String"));
dt.Columns.Add(new DataColumn("validacao", System.Type.GetType("System.String")));
foreach(DataRow r in dt.Rows) {
int valido = (int)r.Field<int>("valido");
r["validacao"] = Adesao.GetValidacao(valido, conexao);
r["dataFormatada"] = Utilidades.FormatarData(r.Field<DateTime>("data_criacao"));
}
return dt;
}
public static string GetValidacao ( int IDValido, SqlConnection conexao ) {
string sql = "";
DataTable dt = new DataTable();
sql = "SELECT [designacao] FROM [forms_estados] WHERE id=@IDValido";
SqlCommand comando = new SqlCommand(sql, conexao);
comando.Parameters.Add(new SqlParameter("@IDValido", SqlDbType.Int));
comando.Parameters["@IDValido"].Value = IDValido;
SqlDataAdapter dtadapter = new SqlDataAdapter(comando);
dtadapter.Fill(dt);
return dt.Rows[0].Field<string>("designacao");
}
数据库
在前端我有一个简单的gridview。
答案 0 :(得分:4)
行int valido = (int)r.Field<int>("valido");
导致错误,对吗?
您的数据库允许此字段为空。所以这可能是问题所在。当您遇到具有null-valido的记录时,强制转换是不可能的。
您可以尝试以下内容:
foreach(DataRow r in dt.Rows)
{
int valido = r.IsNull("valido") ? 0 : r.Field<int>("valido");
r["validacao"] = Adesao.GetValidacao(valido, conexao);
r["dataFormatada"] = Utilidades.FormatarData(r.Field<DateTime>("data_criacao"));
}
答案 1 :(得分:2)
一个体面的反汇编程序是找出代码失败原因的好方法。我说:
private static T ValueField(object value)
{
if (DBNull.Value == value)
{
throw DataSetUtil.InvalidCast(Strings.DataSetLinq_NonNullableCast(typeof(T).ToString()));
}
return (T) value;
}
只留下一种可能性,您查询的表中的列包含null。表格设计的屏幕截图不排除这种可能性,您允许“valido”为空。异常消息应该告诉你这个,确保你能看到它。