System.Data.SqlClient.SqlException:“无效的列名'e'” |数据库错误

问题描述

我正在为项目使用数据库数据,当我在TextBox1中键入字母时,应用程序崩溃并显示错误

System.Data.sqlClient.sqlException:“无效的列名'e'。”

数据库名称是带有“ Id”和“ altitudes”的表 id是varchar,海拔是nchar。

这就是我希望它如何工作: 在name.Text中键入名称,在数据库搜索名称,然后将指定的海拔高度粘贴到height.Text中。 海拔高度是数字,名称数据库中的字母。

我的代码中的错误在哪里? (数据源是故意空白)

        {
            String source = @"Data Source=";
            sqlConnection con = new sqlConnection(source);
            con.open();

            String sqlSelectQuery = "SELECT * FROM [Table] WHERE ID ="+char.Parse(name.Text);
            sqlCommand cmd = new sqlCommand(sqlSelectQuery,con);
            sqlDataReader dr = cmd.ExecuteReader();
            if (dr.Read())
            {
                altitude.Text = (dr["altitudes"].ToString());
            }
            con.Close();
        }

解决方法

您绝对不应连接输入以创建SQL。它非常脆弱,容易受到SQL注入和i18n / l10n问题(值格式)的影响。很多坏事。

解决方案应该始终是:参数。

例如:

const string sqlSelectQuery = "SELECT * FROM [Table] WHERE ID = @id";
using SqlCommand cmd = new SqlCommand(sqlSelectQuery,con);
cmd.Parameters.AddWithValue("@id",name.Text);
// Etc

或更轻松地使用Dapper之类的工具:

var alt = con.QuerySingleOrDefault<string>(
    "SELECT altitudes FROM [Table] WHERE ID = @id",new { id = name.Text });