SQL查询没有得到所有的数据c# /ASP.net

本文关键字:数据 ASP net 查询 SQL | 更新日期: 2023-09-27 17:53:20

我的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();

SQL查询没有得到所有的数据c# /ASP.net

From SqlCommand.ExecuteScalar method

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

如果你想从查询中返回多个值,你需要使用ExecuteReader方法。

不清楚你想写什么,但作为一个例子;

using(SqlDataReader reader = cmd1.ExecuteReader())
{
    while (reader.Read())
    {
        Response.Write(reader[0].ToString()); //This writes first column values for your all rows.
    }
}

SqlDataReader.Read方法逐行读取查询结果

你应该使用using语句来处理你的SqlConnectionSqlCommand,就像我处理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.
        }
    }
}

更重要的是,您应该始终使用参数化查询。这种字符串连接容易受到SQL注入攻击。

例如

,

string insert = @"SELECT ProductName, productSpace FROM Products
                  WHERE ProductId = @id";
SqlCommand cmd1 = new SqlCommand(insert, connection);
cmd1.Parameters.AddWithValue("@id", NoDupes[z]);

作为最后的提示,您不需要为所有列或表的名称使用方括号[]。如果您的数据库对象名称是保留关键字或包含空格(当然这两种情况都不建议使用),请使用它。

您需要使用ExecuteReader并遍历datareader

using (var dr= cmd.ExecuteReader())
    {
        while(dr.Read())
        {
            //Logic
        }
    }

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

try this

SqlDataReader reader = cmd1.ExecuteReader();
while (reader.Read())
{
     Response.Write((String.Format("{0}", reader[0]));
}

如果你使用

ExecuteScalar():

将用于包含聚合函数的非操作查询。返回查询结果的第一行和第一列值。返回类型为object。返回值是强制的,应该赋值给所需类型的变量。

ExecuteReader():

将用于操作和非操作查询(Select)返回查询选择的行集合。返回类型为DataReader。返回值是强制的,应该分配给另一个对象DataReader。

SqlDataReader rdr= cmd1.ExecuteReader();
while (rdr.read())
{  
 Response.Write(rdr.GetValue().ToString().Trim());
}