我的SQL查询没有从多个列获取信息。 为了测试我尝试使用2,但我也尝试获取所有数据,这两次它只给我找到的第一列。
string connectionString = SqlDataSource1.ConnectionString;
SqlConnection connection = new SqlConnection(connectionString);
string insert = "SELECT [ProductName], [productSpace] FROM [Products] WHERE [ProductId] = '" + NoDupes[z] + "'";
SqlCommand cmd1 = new SqlCommand(insert, connection);
cmd1.Connection.Open();
Response.Write(cmd1.ExecuteScalar().ToString());
cmd1.Connection.Close();
答案 0 :(得分:3)
来自SqlCommand.ExecuteScalar
method
执行查询,返回第一行的第一列 查询返回的结果集。其他列或行是 忽略。强>
如果要从查询中返回多个值,则需要使用ExecuteReader
method。
目前尚不清楚你想写什么,但作为一个例子;
using(SqlDataReader reader = cmd1.ExecuteReader())
{
while (reader.Read())
{
Response.Write(reader[0].ToString()); //This writes first column values for your all rows.
}
}
SqlDataReader.Read
method会按行行读取您的查询结果。
您应该像SqlConnection
那样使用using
statement来处理SqlCommand
和SqlDataReader
。等;
using(SqlConnection connection = new SqlConnection(connectionString))
using(SqlCommand cmd1 = connection.CreateCommand())
{
...
...
connection.Open();
using(SqlDataReader reader = cmd1.ExecuteReader())
{
while (reader.Read())
{
Response.Write(reader[0].ToString()); //This writes first column values for your all rows.
}
}
}
更重要的是,您应该始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。
例如;
string insert = @"SELECT ProductName, productSpace FROM Products
WHERE ProductId = @id";
SqlCommand cmd1 = new SqlCommand(insert, connection);
cmd1.Parameters.AddWithValue("@id", NoDupes[z]);
作为最后一个提示,您不需要为所有列或表名使用方括号[]
。如果您的数据库对象名称为reserved keyword或包含空格(当然两者都不推荐),请使用它。
答案 1 :(得分:1)
您需要使用ExecuteReader并遍历datareader
using (var dr= cmd.ExecuteReader())
{
while(dr.Read())
{
//Logic
}
}
答案 2 :(得分:0)
ExecuteScalar执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。
答案 3 :(得分:0)
如果你使用
ExecuteScalar():
将与包含聚合函数的非操作查询一起使用。 返回查询结果的第一行和第一列值。 返回类型是对象。 返回值是强制性的,应分配给所需类型的变量。
ExecuteReader():
将与Action和Non-Action Queries(选择)一起使用 返回Query选择的行集合。 返回类型是DataReader。 返回值是必需的,应该分配给另一个对象DataReader。
SqlDataReader rdr= cmd1.ExecuteReader();
while (rdr.read())
{
Response.Write(rdr.GetValue().ToString().Trim());
}
答案 4 :(得分:0)
试试这个
SqlDataReader reader = cmd1.ExecuteReader();
while (reader.Read())
{
Response.Write((String.Format("{0}", reader[0]));
}