C# System.InvalidCastException:“无法将”“System.Double”“类型的对象强制转换为”“System.Single”“。”

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

Hy, 我在第_obj.Addnew data行收到此错误。。。 这是我的密码

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; }
}