这是我想要实现的目标。我想从同一个表中的同一行获取两个值,并将它们存储到两个变量中。我在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;
如何在不编写多个查询的情况下实现这一目标?谢谢
答案 0 :(得分:3)
请参阅返回ExecuteReader的SqlCommand SqlDataReader的方法:
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];
}
}
}
答案 1 :(得分:2)
你的第二个SQL命令不起作用,如果你想要值,你将无法进行标量查询......
尝试:
SqlCommand command = new SqlCommand("SELECT [Value1], [Value2] FROM [ExampleTable] where Ad_name=@adname", con);
并添加参数。
然后你可以
var reader = command.ExecuteReader();
并通过
获取值reader["[Value1]"];
reader["[Value2]"];
基本上,执行标量查询仅适用于只返回单个值的查询。
答案 2 :(得分:1)
您只需使用ExecuteReader方法调用数据库一次 请注意SELECT之后如何列出所需的单个列。用逗号分隔 这是SELECT statement所需的常用基本语法 此方法返回一个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();
}
答案 3 :(得分: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 ));
}