0

这是我想要实现的目标。我想从同一张表的同一行中获取两个值并将它们存储到两个变量中。我在 MVC 中这样做。

这是我正在做的事情:

SqlCommand amd = new SqlCommand("SELECT [Value1] FROM [ExampleTable] where Ad_name=@adname", con);
SqlCommand bmd = new SqlCommand("SELECT [Value2] FROM [ExampleTable] where Ad_name=@adname", con);
amd.Parameters.AddWithValue("@adname", aname);
bmd.Parameters.AddWithValue("@adname", aname);
imgpath1 = amd.ExecuteScalar().ToString();
imgpath2 = bmd.ExecuteScalar().ToString();

但这是我想要的:

SqlCommand amd = new SqlCommand("SELECT [Value1] AND [Value2] FROM [ExampleTable] where Ad_name=@adname", con);
amd.Parameters.AddWithValue("@adname", aname);
imgpath1 = Value1;
imgpath2 = Value2;

如何在不编写多个查询的情况下实现这一目标?谢谢

4

4 回答 4

3

请参阅返回SqlDataReader的 SqlCommand ExecuteReader方法:

using(var command = new SqlCommand("SELECT [Value1], [Value2] FROM [ExampleTable] where Ad_name=@adname", con))
{
    command.Parameters.AddWithValue("@adname", aname);

    using(var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            imgpath1 = reader[0];
            imgpath2 = reader[1];
        }
    }
}
于 2013-04-29T07:55:27.883 回答
2

您的第二个 SQL 命令不起作用,如果您想要值,您将无法进行标量查询......

尝试:

 SqlCommand command = new SqlCommand("SELECT [Value1], [Value2] FROM [ExampleTable] where Ad_name=@adname", con);

并添加参数。

那么你也能

var reader = command.ExecuteReader();

并通过

reader["[Value1]"];
reader["[Value2]"];

从本质上讲,执行标量查询意味着只返回单个值的查询。

于 2013-04-29T07:57:34.063 回答
1

您只需使用ExecuteReader方法调用数据库一次。
请注意,所需的单个列是如何在 SELECT 之后以逗号分隔的。这是SELECT 语句
所需的通用基本语法 此方法返回一个 DataReader,您可以使用它来获取一行的单个值。 我想您的查询只返回一条记录,因此,循环并不是绝对必要的。

SqlCommand amd = new SqlCommand("SELECT [Value1], [Value2] FROM [ExampleTable] where Ad_name=@adname", con);
amd.Parameters.AddWithValue("@adname", aname);
SqlDataReader reader = amd.ExecuteReader();
while(reader.Read())
{
    imgPath1 = reader[0].ToString();
    imgPath2 = reader[1].ToString();
}
于 2013-04-29T07:54:37.387 回答
1

使用逗号作为检索列之间的分隔符,使用 GetOrdinal 避免像 [1] 和 [2] 这样的常量。

const string ColumnOne = "ColumnOne";
const string ColumnTwo = "ColumnTwo";
var sqlCmd = new SqlCommand("select [VALUE1] as " + ColumnOne + ", [VALUE2] as " + ColumnTwo + " from table", sqlConn);
var sqlCmdReader = sqlCmd.ExecuteReader();
if (sqlCmdReader.Read())
    {
    var resultOne= sqlCmdReader.GetString(sqlCmdReader.GetOrdinal(ColumnOne));
    var resultTwo= sqlCmdReader.GetString(sqlCmdReader.GetOrdinal(ColumnTwo ));
}
于 2013-04-29T07:55:34.290 回答