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

验证用户信息时Sql数据库报错:无效列名问题求助

问题原因

你遇到的错误是因为混合使用了字符串插值和参数化查询,字符串插值时没给字符串类型的managerSurname加单引号,导致SQL把Bobbo识别成列名而非查询值。另外你虽然添加了参数,但查询语句里根本没用到这些参数,等于白加了。

修复后的代码
// 将SqlConnection放入using块,确保资源自动释放
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
    connection.Open();

    int ManagerID = int.Parse(tbx_MngNumber.Text);
    string managerSurname = tbxMangSurname.Text;
    string ManagerPhoneNumber = tbxNumber.Text;
    // 用参数占位符替代直接字符串插值
    string query = "SELECT ManagerFirstName FROM ManagerTable WHERE ManagerID=@ManagerID AND ManagerSurname=@ManagerSurname AND ManagerPhoneNumber=@ManagerPhoneNumber";
    
    using (SqlCommand cmd = new SqlCommand(query, connection))
    {
        cmd.Parameters.AddWithValue("@ManagerID", ManagerID);
        cmd.Parameters.AddWithValue("@ManagerSurname", managerSurname);
        cmd.Parameters.AddWithValue("@ManagerPhoneNumber", ManagerPhoneNumber);

        // 将SqlDataReader也放入using块,自动释放资源
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            if (reader.Read())
            {
                MessageBox.Show("manager");
            }
            else
            {
                MessageBox.Show("no");
            }
        }
    }
}
关键说明
  • 全程使用参数化查询,既避免字符串拼接带来的SQL注入风险,也解决了字符串值的语法错误问题
  • 把SqlConnection、SqlDataReader都放入using块,确保数据库资源自动释放,避免内存泄漏
  • 参数名要和查询语句里的占位符完全对应,保证SQL能正确匹配参数值

内容的提问来源于stack exchange,提问作者Oliver Hewson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:40:03