SQL查询返回List

时间:2017-01-06 19:41:33

标签: c# mysql sql winforms visual-studio

我似乎无法正常工作:

我的表格标题是'genre''艺术家''专辑' 我传入的参数是(类型,过滤器,值)(“艺术家”,“流派”,“摇滚”),其中数据库中有两行,类型为“摇滚”。

当我按照调试器时,'while(reader.Read())'必须返回false,因为从不输入循环,因此没有写入List。

    public static List<String> getWithFilter(String type, String filter, String value)
    {

        List<String> columnData = new List<String>();

        string query = "SELECT @type FROM Music WHERE" +
            " @filter = '@value'";
        SqlConnection connection = Database.GetConnection();
        SqlCommand getData = new SqlCommand(query, connection);
        getData.Parameters.AddWithValue("@type", type);
        getData.Parameters.AddWithValue("@filter", filter);
        getData.Parameters.AddWithValue("@value", value);
        connection.Open();

        using (connection)
        {
            using (getData)
            {
                using (SqlDataReader reader = getData.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        columnData.Add(reader.GetString(0));
                    }
                }
            }
        }
        return columnData;
    }

3 个答案:

答案 0 :(得分:1)

您不能使用参数作为列的名称,并且在使用它们时不要在它们周围加上引号。现在你的查询相当于

SELECT 'artist' FROM Music WHERE 'genre' = '@value'

您可以改为执行以下操作。

string query = "SELECT " + type + " FROM Music WHERE " + filter + " = @value";

只需删除创建@type@fitler参数的行。

答案 1 :(得分:0)

您正在寻找格式化字符串插值(需要C#6.0):

string query = 
   $@"SELECT {type} 
        FROM Music 
       WHERE {filter} = @value";

... 

getData.Parameters.AddWithValue("@value", value);

格式化更加冗长:

 string query = String.Format(
    @"SELECT {0} 
        FROM Music 
       WHERE {1} = @value", type, filter);

答案 2 :(得分:0)

我假设您正在使用.net 2

DateTime current = DateTime.Now;
       Console.WriteLine(current);
        SqlConnection conn = new SqlConnection();
        string q = "SELECT @field FROM student";
        SqlDataAdapter da = new SqlDataAdapter(q, conn);
        da.SelectCommand.Parameters.AddWithValue("@field", "snName");
        DataTable dt = new System.Data.DataTable();
        conn.Open();
        da.Fill(dt);
        conn.Close();
        List<string> names = new List<string>();
        foreach (DataRow dr in dt.Rows)
        {
            names.Add(dr[0].ToString());
        }
        Console.WriteLine("Fetching {0} data for {1}", names.Count, DateTime.Now - current);
        Console.ReadKey();

您可以使用lambda表达式在.net&gt; 4

中映射数据表