ExecuteScalar - 特定列

时间:2014-10-20 01:48:32

标签: sql asp.net executescalar

我的计划表有15个字段,使用ExecuteScalar似乎只从第一列获取结果,如何指定我想要的列名?例如,当我运行下面的代码时,它将返回1,这是我的ID列中的值,但我想要plan_rate列。

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CustomerDataConnectionString"].ConnectionString))
{
   conn.Open();

    SqlCommand cmd = new SqlCommand("SELECT * FROM [dbo].[plans] WHERE age_group = @age_group AND coverage_type = @coverage_type", conn);
    cmd.Parameters.AddWithValue("@age_group", dd_ageGroup.Text);
    cmd.Parameters.AddWithValue("@coverage_type", dd_coverageType.Text);

    Object result = cmd.ExecuteScalar();

    if (result != null)
        Label1.Text = "Plan rate: $" + result.ToString();

    else
        Label1.Text = "Plan is not available in this state.";


}

2 个答案:

答案 0 :(得分:1)

ExecuteScaler只能在您返回单个值时使用。这意味着您的查询只需要一列和一行。

因此,您需要使用Select * from更改Select myColumn from

如果您需要第二快的执行并返回多个列,则可以使用ExecuteReader

SqlDataReader reader = command.ExecuteReader();
while (reader.Read()){
   Console.WriteLine(String.Format("{0}", reader[0]));//reader[0] column1, reader[1] column2,..
}

答案 1 :(得分:1)

the documentation中的第一行:

  

执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。

如果您只想plan_rate,可以将查询更改为:

"SELECT plan_rate FROM [dbo].[plans]...

或使用ExecuteReader并从DataReader

中读取您想要的列
using(DataReader reader = cmd.ExecuteReader())
{
    while(reader.Read())
    {
        ...
        string plan_rate = reader["plan_rate"].ToString();
        ...
    }
}