获取MAX值返回SQL命令c#

时间:2014-07-29 19:15:08

标签: c# sql sql-server max

我正在尝试返回MAX值,但它会一直返回0.

string stateValue = "CA";
SqlCommand cmd = new SqlCommand("SELECT MAX(Population) FROM TestData WHERE State=" + stateValue);
cmd.Parameters.Add("@Population", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
DBConnection.Instance.execNonQuery(cmd);

int population = (int)cmd.Parameters["@Population"].Value;

DBConnection类中,这是execNonQuery函数:

public int execNonQuery(string sCmd, CommandType cmdType)
{
    SqlCommand cmd = new SqlCommand(sCmd, m_sqlDataBase);
    cmd.CommandType = cmdType;

    try
    {
        m_sqlDataBase.Open();
    }
    catch { }

    return cmd.ExecuteNonQuery();
}

3 个答案:

答案 0 :(得分:4)

参数方向与存储过程一起使用。这里只是执行一个查询。您需要使用SqlCommand.ExecuteScalar方法,因为您只能获得一个结果。它会返回object,因此您必须先将其转换为int才能使用它。

此外,您的代码使用字符串连接来创建SQL查询,它很容易SQL Injection。还可以考虑在命令和连接中使用using statement

using (SqlCommand cmd = new SqlCommand("SELECT MAX(Popluation) FROM TestData WHERE State=@state"))
{
    //Associate connection with your command an open it
    cmd.Parameters.AddWithValue("@state", stateValue);
    int populuation = (int)cmd.ExecuteScalar();
}

答案 1 :(得分:2)

ExecuteNonQuery调用不会返回执行查询的结果。

您可以使用ExecuteScalar或执行来获取值。

    public int execQuery(string sCmd, CommandType cmdType)
    {
        SqlCommand cmd = new SqlCommand(sCmd, m_sqlDataBase);
        cmd.CommandType = cmdType;
        try
        {
            m_sqlDataBase.Open();


            return Convert.ToInt32(cmd.ExecuteScalar());
        }
        catch { 
             // handle your error but don't trap it here..
             throw;
        }
    }

ExecuteScalar是获取第一个值或第一个结果集的短路。您可以使用它从查询中返回单个值,例如您的。

另一种选择是使用Execute方法获取结果集,然后使用它来获取您所追求的值:

    public int execQuery(string sCmd, CommandType cmdType)
    {
        SqlCommand cmd = new SqlCommand(sCmd, m_sqlDataBase);
        cmd.CommandType = cmdType;
        try
        {
            m_sqlDataBase.Open();

            using(var dataReader = cmd.Execute())
            {
                if (dataReader.Read())
                {
                      return Convert.ToInt32(dataReader[0]);
                }
            }
        }
        catch { 
             // handle your error but don't trap it here..
             throw;
        }
    }

答案 2 :(得分:0)

如何'回合

  var sql = string.Format("SELECT MAX(Popluation) FROM TestData WHERE State='{0}'", stateValue);
  SqlCommand cmd = new SqlCommand(sql);

(重要的部分是添加单引号.string.Format是为了让它看起来很漂亮)