得到";无效列名“;以下代码中出现Sql异常
本文关键字:代码 Sql 异常 quot 无效 得到 | 更新日期: 2023-09-27 18:22:35
我正在尝试在运行时传递要在代码中检查的列名和值。但是,我得到了一个"无效列名"异常。代码如下:
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();
消息显示表中没有名为"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'
必须有一个例外,即没有名为CCD_ 14的列。由于你没有得到这个例外,只有一个可能的解释:声明被更改为
Select * from Employee Where 'eirghoerihgoh' = 'Sagar'
这会执行,但不会返回结果,因为条件始终是false
。
相反,您可以用这种方式编写代码,它可以完美地工作:
"Select * from Employee Where "+DropDownList1.SelectedValue.ToString()+" =
'Sagar'" – Vidhya Sagar Reddy
原因很简单,要在SQL中指定的值应该用单引号,顺便说一句,这是一个简单的错误。。!!!!
SqlCommand com = new SqlCommand("Select * from Employee Where @field = 'Sagar'", con);
甚至在下一行将参数更改为"field",而不是"@field"。。!!
com.Parameters.AddWithValue("field", DropDownList1.SelectedValue.ToString());
这是有效的..>!!!!