繁体   English   中英

如何从SQL SELECT原始查询返回结果?

[英]How to return results from SQL SELECT raw Query?

我的控制器类中有一个方法,应该从该方法内部的原始SQL查询返回结果。 问题是我无法在应该返回多列结果的查询中将返回的多列结果拉到列表中。

我知道问题与在读取过程中如何添加到结果列表有关,但是我不确定如何正确构造此结构以返回多个值。

这是我目前的方法:

public IActionResult Search ([FromRoute]string input)
{
    string sqlcon = _iconfiguration.GetSection("ConnectionStrings").GetSection("StringName").Value;

    List<string> results = new List<string>();

    using (var con = new SqlConnection(sqlcon))
    {
        using (var cmd = new SqlCommand()
                             {
                                   CommandText = "SELECT u.UserID, u.User FROM [dbo].[Users] u WHERE User = 'Value';",
                                   CommandType = CommandType.Text,
                                   Connection = con
                             })
        {
            con.Open();

            using (var reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    results.Add(reader.GetString(0));
                }

                con.Close();

                return Ok(new Search(results));
            }
        }
    }
}

SQL查询应该根据输入的用户返回UserID和用户,但是,此处仅返回用户。

有谁知道我缺少为此SQL查询和方法返回多个列名称的信息? 任何建议将不胜感激。

仅供参考,我在这里不能使用存储过程,我没有在该数据库上创建SP的权限。

您可以为查询的结果创建一个类

public class ClassForResults(){
    public int UserID { get; set; };
    public string User { get; set; }
}

public IActionResult Search ([FromRoute]string input)
{
    string sqlcon = _iconfiguration.GetSection("ConnectionStrings").GetSection("StringName").Value;

    List<ClassForResults> results = new List<ClassForResults>();

    using (var con = new SqlConnection(sqlcon))
    {
        using (var cmd = new SqlCommand()
                             {
                                   CommandText = "SELECT u.UserID, u.User FROM [dbo].[Users] u WHERE User = 'Value';",
                                   CommandType = CommandType.Text,
                                   Connection = con
                             })
        {
            con.Open();
            using (var reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    ClassForResults result = new ClassForResults();
                    result.UserID = reader.GetInt(0);
                    result.User = reader.GetString(1);
                    results.Add(result);
                }

                con.Close();

                return Ok(new Search(results));
            }
        }
    }
}

暂无
暂无

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

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