You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 通过TextBox检索SQL数据库数据绑定到ListView的代码报错求助

问题说明
  • 类型转换错误:reader[索引]返回值为object类型,而ListView.Items.Add、SubItems.Add方法仅接收字符串类型参数,未做显式类型转换会触发报错。
  • 语法适配错误:C#中SqlDataReader没有Item/item属性,VB.NET的reader.Item(索引)对应C#的原生索引器写法reader[索引]即可。
  • 逻辑错误:原代码在SqlDataReader读取数据前就提前释放了SqlCommand对象,会导致数据读取失败。
  • 安全风险:直接拼接用户输入生成SQL语句存在严重SQL注入风险,且手动管理资源释放容易出现连接泄漏。
修正后可运行代码
private void TextBox1_TextChanged(object sender, EventArgs e)
{
    ListView1.Items.Clear();

    // using块会在代码执行完成后自动释放资源,无需手动调用Dispose/Close
    using (SqlCommand cmd = new SqlCommand("SELECT * FROM Vendors WHERE VendorName LIKE @SearchText OR VendorID LIKE @SearchText", con))
    {
        // 参数化查询彻底避免SQL注入风险
        cmd.Parameters.AddWithValue("@SearchText", $"%{TextBox1.Text}%");
        
        con.Open();
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                // 显式转字符串后构建ListViewItem,写法更简洁不易出错
                ListViewItem listItem = new ListViewItem(reader[0].ToString());
                listItem.SubItems.Add(reader[1].ToString());
                listItem.SubItems.Add(reader[2].ToString());
                listItem.SubItems.Add(reader[3].ToString());
                ListView1.Items.Add(listItem);
            }
        }
        con.Close();
    }
}

内容的提问来源于stack exchange,提问作者Talat Farooq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:15:04