问题描述
我正在为项目使用数据库数据,当我在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 });