0

我的计划表有 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.";


}
4

2 回答 2

2

文档中的第一行:

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

如果您只想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();
        ...
    }
}
于 2014-10-20T01:52:48.893 回答
1

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

所以你需要Select * fromSelect myColumn from.

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

SqlDataReader reader = command.ExecuteReader();
while (reader.Read()){
   Console.WriteLine(String.Format("{0}", reader[0]));//reader[0] column1, reader[1] column2,..
}
于 2014-10-20T01:49:45.533 回答