C# System.InvalidCastException:“无法将”“System.Double”“类型的对象强制转换为”“System.Single”“。”
Hy, 我在第_obj.Addnew data行收到此错误。。。 这是我的密码C# System.InvalidCastException:“无法将”“System.Double”“类型的对象强制转换为”“System.Single”“。”,c#,C#,Hy, 我在第_obj.Addnew data行收到此错误。。。 这是我的密码 SqlCommand com = new SqlCommand("sp_get_a", con) { CommandType = CommandType.StoredProcedure }; _obj = new List<n>(); con.Open(); SqlDataReader rdr = co
SqlCommand com = new SqlCommand("sp_get_a", con)
{
CommandType = CommandType.StoredProcedure
};
_obj = new List<n>();
con.Open();
SqlDataReader rdr = com.ExecuteReader();
if (rdr.HasRows)
{
while (rdr.Read())
{
_obj.Add(new data() { Id = rdr.GetInt32(0), na = rdr.GetString(1), Al = rdr.GetString(2), Sc = rdr.GetFloat(3), So = rdr.GetInt32(4), Ta = rdr.GetInt32(5), Ai = rdr.GetInt32(6), Sh = rdr.GetInt32(7) });
}
}
else
{
throw new Exception("rdr don't have any rows");
}
con.Close();
作为
选择Id、Na、Al、Sc、So、Ta、Ai、Sh
从x
我没有任何double值,最接近double的是Scfloat。所以我尝试了Sc=Convert.ToSinglerdr.GetFloat3。
我哪里做错了?
编辑我的模型
public class n
{
public int Id { get; set; }
public string Na { get; set; }
public string Al { get; set; }
public float Sc { get; set; }
public int So { get; set; }
public int Ta { get; set; }
public int Ai { get; set; }
public int Sh { get; set; }
}
您需要将Sc的数据类型从float更改为double SQL Server real相当于C Single,SQL Server float相当于C Double
你应该考虑@ JDWEN点也
< P>你需要将Sc的数据类型从浮点改变为双 SQL Server real相当于C Single,SQL Server float相当于C Double你应该考虑@ JDWEN PoT也什么是“新列表”?此列在数据库中的数据类型是什么?您收到的是64位双精度,无法将数字转换为32位浮点。因为32位双精度的范围不足以转换数字。您需要将Sc的类型从浮点更改为双精度。Hy Vivek,List是我的模型类。数据库中的数据类型和我的公共类n中显示的相同。谢谢你。它解决了我的问题。我想知道为什么我会收到来自数据库的64位double,即使它存储为float。我还想问,为什么它要自己转换成单曲?什么是‘新列表’;?此列在数据库中的数据类型是什么?您收到的是64位双精度,无法将数字转换为32位浮点。因为32位双精度的范围不足以转换数字。您需要将Sc的类型从浮点更改为双精度。Hy Vivek,List是我的模型类。数据库中的数据类型和我的公共类n中显示的相同。谢谢你。它解决了我的问题。我想知道为什么我会收到来自数据库的64位double,即使它存储为float。另外,我想问一下,为什么它试图自己转换成单曲呢?Hy Vivek,谢谢你的解释。这也清楚了为什么它试图转换自己,即使我没有尝试转换任何东西@Jdwend point也很有帮助。Hy Vivek,谢谢你的同等解释。这也清楚了为什么它试图转换自己,即使我没有尝试转换任何东西@Jdwend point也很有帮助。
public class n
{
public int Id { get; set; }
public string Na { get; set; }
public string Al { get; set; }
public float Sc { get; set; }
public int So { get; set; }
public int Ta { get; set; }
public int Ai { get; set; }
public int Sh { get; set; }
}