System.Data.SqlClient.SqlException: "Invalid column name 'e'." |数据库错误

System.Data.SqlClient.SqlException: "Invalid column name 'e'." | Error with Database

我正在为我的项目使用数据库数据,当我在 Textbox1 中键入一个字母时,应用程序崩溃并出现错误:

System.Data.SqlClient.SqlException:“无效的列名称 'e'”。“=13=]

数据库名称是 Table,带有“Id”和“altitudes” Id 是一个 varchar,而 altitudes 是一个 nchar。

这就是我希望它的工作方式: 在 name.Text 中输入名称,在数据库中搜索该名称并将分配的高度粘贴到 altitude.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 });