首页 > 解决方案 > System.Data.SqlClient.SqlException: '无效的列名'"

问题描述

我在 dataGridView 单元格双击事件中编写了下面的代码,并带有全行选择,所以每当我双击该行时,它应该反馈给文本框和组合框。

但我收到错误“System.Data.SqlClient.SqlException: 'Invalid column name 'new1'.'”,其中 new 1 是该字段中的性别。而不是阅读 combobox2 的价值,而是阅读 genderm

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();

标签: c#

解决方案


问题是您缺少引号。无论如何,正确的解决方案是使用 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();

推荐阅读