繁体   English   中英

SQL查询未获取所有数据C#/ ASP.net

[英]SQL query not getting all the data C#/ASP.net

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

SqlCommand.ExecuteScalar方法

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

如果要从查询中返回多个值,则需要使用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方法 按行读取查询结果

您应该像使用SqlDataReader一样使用using语句来处理SqlConnectionSqlCommand 喜欢;

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执行查询,并返回查询返回的结果集中第一行的第一列。 其他列或行将被忽略。

如果你用

ExecuteScalar():

将与包含聚合函数的非操作查询一起使用。 返回查询结果的第一行和第一列的值。 返回类型是对象。 返回值是强制性的,应将其分配给所需类型的变量。

ExecuteReader():

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

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

}

尝试这个

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM