简体   繁体   中英

How to return results from SQL SELECT raw Query?

I have a method in my controller class that is supposed to return the results from a raw SQL query inside the method. The problem is I can't pull return more than one column result to the list in a query that is supposed to return multiple column results.

I know that the problem has to do with how I am adding to the results list during the Read, but I am unsure how to structure this properly to return multiple values.

Here is my current method:

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));
            }
        }
    }
}

The SQL query is supposed to return the UserID and User based on the entered User, however, only the User gets returned here.

Does anyone know what I am missing to return multiple column names for this SQL query and method? Any advice would be greatly appreciated.

FYI, I can't use a stored procedure here, I do not have permission to create an SP on this database.

You can create a class for the results of the Query

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));
            }
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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