我的计划表有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.";
}
答案 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();
...
}
}