[英]System.Data.SqlClient.SqlException: Invalid column name 'ErneGaels'
[英]System.Data.SqlClient.SqlException: 'Invalid column name '"
我在具有全行选择的dataGridView celldouble click事件中编写了以下代码,因此,每当我双击该行时,它都应反馈到文本框和组合框。
但是我收到错误“ System.Data.SqlClient.SqlException:'无效的列名'new1'。'”,其中new 1是该字段中的genderem。 与其读取combobox2的值,不如读取性别
SqlConnection conn = new SqlConnection(config.constring);
SqlCommand command = new SqlCommand("SELECT rangemaster.code as
code, rangemaster.genderm as [Male], rangemaster.genderf as [Female],
rangemaster.age as [Age], rangemaster.agerange as [Age Range],
rangemaster.commonrange as [Common Range], testmaster.testname as
[Test Name] FROM rangemaster LEFT JOIN testmaster ON rangemaster.code =
testmaster.code where rangemaster.code = " +
dataGridView1.SelectedRows[0].Cells[0].Value.ToString() + "", conn);
conn.Open();
using (SqlDataReader reader = command.ExecuteReader())
while (reader.Read())
{
name4.Text = reader[0].ToString();
textBox4.Text = reader[1].ToString();
textBox3.Text = reader[2].ToString();
comboBox1.SelectedIndex = Convert.ToInt32(reader[3]) - 1;
textBox5.Text = reader[4].ToString();
textBox1.Text = reader[5].ToString();
comboBox2.SelectedIndex = Convert.ToInt32(reader[6]) - 1;
}
conn.Close();
问题是您缺少引号。 无论如何,正确的解决方案是使用SQL参数,例如:
SqlCommand command = new SqlCommand("SELECT rangemaster.code as ... where rangemaster.code = @param");
command.Parameters.Add("@param",SQlDbType.Nvarchar).Value = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
问题是您缺少引号。 您必须在末尾添加“”。
SqlCommand command = new SqlCommand("SELECT rangemaster.code as ... where rangemaster.code = @param");
command.Parameters.Add("@param",SQlDbType.Nvarchar).Value = dataGridView1.SelectedRows[0].Cells[0].Value.ToString() + "", conn);
您可以使用它,但我建议您使用参数。 他们可以从SQL注入中拯救您。
使用类似这样的东西:
SqlCommand command = new SqlCommand("SELECT rangemaster.code as ... where rangemaster.code = @param");
command.Parameters.Add("@param",SQlDbType.Nvarchar).Value = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
始终练习此操作以获得更安全的代码。
你不加引号..
您的代码
"..where rangemaster.code = " +
dataGridView1.SelectedRows[0].Cells[0].Value.ToString() + "", conn);
如果单元格的内容是new1,则它将读取where rangemaster.code = new1
..您需要在其周围加上引号,最好使用参数并从注入中保存
所以
SqlCommand command = new SqlCommand("SELECT ... where rangemaster.code = @code", conn);
command.Parameters.AddWithValue("@code",dataGridView1.SelectedRows[0].Cells[0].Value.ToString());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.