繁体   English   中英

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

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

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

System.Data.SqlClient.SqlException: "无效的列名 'e'。"

数据库名称是带有“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 });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM