SQL查询没有给出任何值

时间:2010-11-26 20:48:31

标签: c# sql-server

它没有任何价值

using (SqlCommand cmd = new SqlCommand("SELECT SUM(Paied) FROM Debt", new SqlConnection(Program.ConnectionString)))
            {
                cmd.Connection.Open();
                SqlDataReader myReader = cmd.ExecuteReader();
                while (myReader.Read())
                {
                    TotalPaiedAll = Convert.ToDecimal( myReader["Paied"].ToString());
                }
                cmd.Connection.Close();
            }

4 个答案:

答案 0 :(得分:4)

您的SQL查询应该是

SELECT SUM(Paied) AS Paied FROM Debt

或者,您可以使用

SELECT SUM(Paied) AS Paied FROM Debt

TotalPaiedAll = (decimal) cmd.ExecuteScalar();

答案 1 :(得分:3)

您没有获得值的原因是SUM(Paied)生成匿名列,而不是名为Paied的列。

以下是针对您的问题的简单修复:

        using (SqlCommand cmd = new SqlCommand("SELECT SUM(Paied) As SumOfPaid FROM Debt", new SqlConnection(Program.ConnectionString))) 
        { 
            cmd.Connection.Open(); 
            SqlDataReader myReader = cmd.ExecuteReader(); 
            while (myReader.Read()) 
            {
                TotalPaiedAll = Convert.ToDecimal(myReader["SumOfPaid"].ToString()); 
            } 
            cmd.Connection.Close(); 
        }

这是一种更好的方法,使用ExecuteScalar方法:

        using (SqlCommand cmd = new SqlCommand("SELECT SUM(Paied) As SumOfPaid FROM Debt", new SqlConnection(Program.ConnectionString)))
        {
            cmd.Connection.Open();
            TotalPaiedAll = (decimal)cmd.ExecuteScalar();
            cmd.Connection.Close();
        }

答案 2 :(得分:1)

使用executioncalar而不是executereader:

decimal sum =(decimal) cmd.ExecuteScalar();

执行while循环没有意义,因为sum只是一个值。

答案 3 :(得分:0)

不是你的错误,但你还需要保护sql连接免受泄漏。