【问题标题】:Getting a list from a SQL query in C#从 C# 中的 SQL 查询中获取列表
【发布时间】:2017-06-05 17:27:10
【问题描述】:

我想将 SQL 查询的结果转换为 C# 列表。我尝试使用以下不起作用的代码 - Visual Studio 返回

System.Data.dll 中出现“System.InvalidCastException”类型的未处理异常

代码:

public List<string> carList(int id)
{
        List<string> list = new List<string>();

        SqlConnection conn = new SqlConnection(connStr);
        conn.Open();

        string query = "SELECT ID FROM Cars WHERE custID = " + id;
        SqlCommand cmd = new SqlCommand(query, conn);

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

        conn.Close();

        return list;
    }

SQL 查询的结果应该只是具有一个或多个 ID(整数)的单列。然后我想把这些都放到一个列表中。希望这能让您对我正在尝试做的事情有所了解。

如果有人能指出我在这里做错了什么,我将非常感激。

【问题讨论】:

  • “不起作用” - 怎么样?你有错误吗?列表是空的?还有什么?
  • 您应该将值作为整数而不是 GetString(0) 获取,然后对该值调用 .ToString() 以将其添加到列表中。
  • Cars.ID 的数据类型是什么?我敢打赌这不是string。试试reader.GetInt32(0).ToString()
  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入
  • @marc_s 好的,我没有意识到这会带来安全风险,感谢您指出。

标签: c# sql-server list


【解决方案1】:

按照 cmets 中的建议尝试一下

while (reader.Read())
{
    list.Add(reader.GetInt32(0).ToString());
}

第0个索引的数据类型应该是一个整数,在添加到列表之前应该转换为字符串。

【讨论】:

    【解决方案2】:

    如果您想要一种更通用的方式将 any 单列结果集转换为可以使用的字符串列表:

    while (reader.Read())
    {
        list.Add(reader.GetValue(0).ToString());
    }
    

    【讨论】:

    • 好的,以后可能会派上用场。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2020-10-24
    相关资源
    最近更新 更多