2011-08-31 48 views
0

问题的标题可能会引起误解。我需要从XML文件中获取属性。然后,使用该属性搜索数据库。由于属性的值是动态的,我必须尝试将它作为参数发送到SQL脚本的WHERE子句。但是,它总是返回无效的列错误。如何将参数传递给WHERE子句?

这里是代码的一部分:

string umail = ""; 
XDocument loaded = XDocument.Load(@"C:\1.xml"); 

var q = from c in loaded.Descendants("AdminUserDB.dbo.U_User") 
     select (string)c.Element("URI"); 

foreach (string em in q) 
    umail = em; 

SqlConnection cn = new SqlConnection("server=(local);database=AdminUserDB;Persist Security Info=True; uid=sa;pwd=pwd"); 
cn.Open(); 

DataSet ds = new DataSet(); 
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM dbo.U_User WHERE URI=umail", cn); 

.....

是否有此操作的任何其他方法?

感谢

SUT

+1

你所得到的错误,因为在部分'URI = umail',数据库期待'umail'是一个列,但你打算在那里有一个值,所以你需要使用'@ umail'来标识它到'SqlDataAdapter',它是查询中的一个参数 - 在它被发送到数据库之前将被替换。 – Zabba

回答

9

只需使用参数:

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM dbo.U_User WHERE [email protected]", cn); 
da.SelectCommand.Parameters.AddWithValue("@umail", umail);