-1

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

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

3 回答 3

14

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


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

查询的执行方式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。当然,如果您使用字段 name 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.

于 2013-07-16T07:44:28.197 回答
1

相反,您可以这样编写代码,效果很好:

"Select * from Employee Where "+DropDownList1.SelectedValue.ToString()+" =
'Sagar'" – Vidhya Sagar Reddy
于 2013-07-16T10:35:07.680 回答
0

原因很简单,要在 SQL 中指定的值应该用单引号括起来,顺便说一下,这是一个简单的错误..!!!!

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

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

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

这是工作..>!!!!

于 2013-07-16T08:01:39.513 回答