在以下代码中获取“无效列名称”Sql异常

时间:2013-07-16 07:40:24

标签: c# asp.net sql

我试图在运行时传递代码中要检查的列名和值。但是我收到“无效的列名称”异常。 代码如下:

string temp = TextBox1.Text.ToString();
SqlConnection con = new SqlConnection("data source=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\Sagar\\Documents\\Test.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlCommand com = new SqlCommand("Select * from Employee Where @field = Sagar", con);
com.Parameters.AddWithValue("@field", DropDownList1.SelectedValue.ToString());
//com.Parameters.AddWithValue("@value", temp);
SqlDataAdapter da = new SqlDataAdapter(com);
con.Open();
SqlDataReader reader = com.ExecuteReader();
GridView1.DataSource = reader;
GridView1.DataBind();

3 个答案:

答案 0 :(得分:14)

消息显示表中没有名为“Sagar”的列。有这样一个栏目吗?如果您向我们展示表模式而不是让我们从错误消息中猜测,情况会更容易。


无法在C#中使用SqlParameter参数化列名。这已经多次讨论过了。

查询以Vidhya Sagar Reddy的方式执行的操作如下:他假定以下查询

Select * from Employee Where @field = 'Sagar'
"Name"设置为@field参数的值时,

会被此查询替换:

Select * from Employee Where Name = 'Sagar'

然而,这是错误的!正在发生的事情是@field参数被替换如下:

Select * from Employee Where 'Name' = 'Sagar'

这不会返回任何结果,因为WHERE子句始终为false。当然,如果您使用字段名Sagar,则此akways将返回true,因为该语句将显示为:

Select * from Employee Where 'Sagar' = 'Sagar'

这是一个简单的测试,以证明我上面所说的。使用以下语句设置@field参数(假设表中没有名为eirghoerihgoh的列):

com.Parameters.AddWithValue("@field", "eirghoerihgoh");

如果查询正确执行(可能没有返回任何结果),则上述内容是正确的。如果不正确,则应该抛出eirghoerihgoh列不存在的异常。


感谢Vidhya Sagar Reddy证明我的观点。通过使用此行

com.Parameters.AddWithValue("@field", "eirghoerihgoh");

你说你没有得到任何结果,但你也没有得到例外。但是,如果该声明确实已更改为

Select * from Employee Where eirghoerihgoh = 'Sagar'

必须有一个例外,说没有名为eirghoerihgoh的列。由于你没有得到那个例外,只有一个可能的解释:声明改为

Select * from Employee Where 'eirghoerihgoh' = 'Sagar'

并执行,但不返回结果,因为条件总是false

答案 1 :(得分:0)

原因很简单,在SQL中指定的值应该是单引号,这是一个简单的错误.. !!!!

SqlCommand com = new SqlCommand("Select * from Employee Where @field = 'Sagar'", con);

甚至将参数更改为以下行中的“field”而不是“@field”.. !!

com.Parameters.AddWithValue("field", DropDownList1.SelectedValue.ToString());

这是有效的..> !!!!

答案 2 :(得分:0)

相反,您可以通过这种方式制作代码,完美无缺:

"Select * from Employee Where "+DropDownList1.SelectedValue.ToString()+" =
'Sagar'" – Vidhya Sagar Reddy