C# 存储过程InvalidCastException错误

C# 存储过程InvalidCastException错误,c#,C#,我在一个简单的控制台应用程序中尝试访问存储过程,由于某种原因,我得到了一个InvalidCastException 有人能帮忙吗 class Customer { public int CustomerID { get; set; } public string FirstName { get; set; } public string SecondName { get; set; } public int Age

我在一个简单的控制台应用程序中尝试访问存储过程,由于某种原因,我得到了一个
InvalidCastException

有人能帮忙吗

    class Customer
    {
        public int CustomerID { get; set; }
        public string FirstName { get; set; }
        public string SecondName { get; set; }
        public int Age { get; set; }
    }

    static void Main(string[] args)
    {
        string storedProc = "dogssimple";
        List<Customer> custList = new List<Customer>();

        SqlConnection conn = new SqlConnection("server=localhost;" +
                                   "Trusted_Connection=yes;" +
                                   "database=mydatabase; " +
                                   "connection timeout=30");
        try
        {
            conn.Open();

            SqlCommand cmd = new SqlCommand(storedProc, conn);

            cmd.CommandType = CommandType.StoredProcedure;

            SqlDataReader rdr = cmd.ExecuteReader();

            while (rdr.Read())
            {
                Customer addCustomer = new Customer() //..... cast exception here
                {
                    CustomerID = (int)rdr["CustomerID"],
                    FirstName = (string)rdr["FirstName"],
                    SecondName = (string)rdr["SecondName"],
                    Age = (int)rdr["Age"],
                }; //....

                Console.WriteLine("Customer: {0}, {1}, {2}, {3}", addCustomer.CustomerID, addCustomer.FirstName, addCustomer.Age, addCustomer.Age);
                custList.Add(addCustomer);
            }

            var age = from x in custList
                      select x.Age;
            var avgAge = age.Average();

            Console.WriteLine("The average age of the customers is " + avgAge);
        }
        catch (Exception e)
        {
            Console.WriteLine(e); ;
        }

        Console.ReadLine();   
}
class客户
{
public int CustomerID{get;set;}
公共字符串名{get;set;}
公共字符串SecondName{get;set;}
公共整数{get;set;}
}
静态void Main(字符串[]参数)
{
字符串storedProc=“dogssimple”;
List custList=新列表();
SqlConnection conn=newsqlconnection(“server=localhost+
“受信任的连接=是;”+
“数据库=我的数据库;”+
“连接超时=30”);
尝试
{
conn.Open();
SqlCommand cmd=新的SqlCommand(storedProc,conn);
cmd.CommandType=CommandType.storedProcess;
SqlDataReader rdr=cmd.ExecuteReader();
while(rdr.Read())
{
Customer addCustomer=new Customer()
{
CustomerID=(int)rdr[“CustomerID”],
FirstName=(字符串)rdr[“FirstName”],
SecondName=(字符串)rdr[“SecondName”],
年龄=(int)rdr[“年龄”],
}; //....
WriteLine(“客户:{0}、{1}、{2}、{3}”、addCustomer.CustomerID、addCustomer.FirstName、addCustomer.Age、addCustomer.Age);
custList.Add(addCustomer);
}
var age=从客户列表中的x开始
选择x.年龄;
var avgAge=年龄。平均值();
Console.WriteLine(“客户的平均年龄为”+平均年龄);
}
捕获(例外e)
{
控制台。写线(e);
}
Console.ReadLine();
}

ADO.NET将null作为DBNull实例返回(如果你问我的话,这很奇怪)。因此,通过以下检查读取值:

SecondName = rdr["SecondName"] is DBNull ? null : (string)rdr["SecondName"]

还要确保数字类型匹配,例如,您可能需要一个int,但可能会得到一个float或decimal。

ADO.NET将null作为DBNull实例返回(如果您问我,这很奇怪)。因此,通过以下检查读取值:

SecondName = rdr["SecondName"] is DBNull ? null : (string)rdr["SecondName"]

还要确保数字类型匹配,例如,您可能需要一个int,但可能会得到一个float或decimal。

ADO.NET将null作为DBNull实例返回(如果您问我,这很奇怪)。因此,通过以下检查读取值:

SecondName = rdr["SecondName"] is DBNull ? null : (string)rdr["SecondName"]

还要确保数字类型匹配,例如,您可能需要一个int,但可能会得到一个float或decimal。

ADO.NET将null作为DBNull实例返回(如果您问我,这很奇怪)。因此,通过以下检查读取值:

SecondName = rdr["SecondName"] is DBNull ? null : (string)rdr["SecondName"]

还要确保数字类型匹配,例如,您可能需要一个int,但可能会得到一个float或decimal。

包括整个堆栈跟踪。快速猜测可能是存储过程返回的类型与您要强制转换的类型不匹配。包括整个堆栈跟踪。快速猜测可能是存储过程返回的类型与您要强制转换的类型不匹配。包括整个堆栈跟踪。快速猜测可能是存储过程返回的类型与您要强制转换的类型不匹配。包括整个堆栈跟踪。快速猜测可能是从存储过程返回的类型与您要强制转换到的类型不匹配。下面是一个包含答案的示例,它涉及到为什么DBNull existtanks@fejesco使用您的答案跟踪问题。从现在起,我们将应用这一点。这里有一个答案,涉及到为什么DBNull existtanks@fejesco用您的答案跟踪了这个问题。从现在起,我们将应用这一点。这里有一个答案,涉及到为什么DBNull existtanks@fejesco用您的答案跟踪了这个问题。从现在起,我们将应用这一点。这里有一个答案,涉及到为什么DBNull existtanks@fejesco用您的答案跟踪了这个问题。从现在起将应用此功能。