2013-02-18 112 views
0

我在我的ASP.NET应用程序中的一个SQL查询中出现奇怪的错误。我试图更新的MS Access表行,下面是我的代码:更新查询语法不正确:无法找到一个

try 
{ 
strQry = @"Update UserMaster set [email protected], [email protected] where [email protected]"; 
cmd.Parameters.AddWithValue("@Pwd", strUserPwd); 
cmd.Parameters.AddWithValue("@RoleID", intRoleID); 
cmd.Parameters.AddWithValue("@UserID", intUserID); 
cmd.Connection = con; 
cmd.CommandText = strQry; 
con.Open(); 
intReturn = cmd.ExecuteNonQuery(); 
con.Close(); 
} 
catch(Exception ex) 
{ 
    throw new Exception(ex.Message); 
} 

据我,有什么我能看到的是,有与更新查询没有问题,因为我从相当长的时间以来一直在使用这种方法,但是,这真是奇怪,我得到了一个异常。

任何一个可以帮助我

+0

我知道我已经通过更新参数的方式适合MS Sql,但它也适用于MS Access,直到你保持了参数顺序正确。 – Cyberpks 2013-02-18 05:33:35

回答

2

其实password是保留字,你需要封装在一个支架[]
所以您的查询就会成为

strQry = @"Update UserMaster set [Password][email protected], [email protected] where [email protected]"; 

其余全部如果正确的话:)

请参阅list of reserve keywords in MS Access 2007 Database

提示:使用non-reserved关键词总是值得警惕的,即使你这样做,然后总是包括[ ]在安全的一面。因为在你急着你不知道哪个保留关键词你搞砸智慧

+0

感谢朋友,它真的没有击中我的头,虽然我知道这一点。你真的很有帮助。 – Cyberpks 2013-02-18 05:40:42

+0

不客气@Cyber​​pks :) – asifsid88 2013-02-18 05:43:25

-1

我认为你正在使用OleDb连接到MSACCESS。

尝试将您的参数声明从@parameter更改为?

更多:OleDbParameter Class

try 
{ 
    strQry = @"Update UserMaster set Password=?, RoleID=? where UserID=?"; 
    var p1 = command.CreateParameter(); 
    p1.Value = strUserPwd; 
    command.Parameters.Add(p1); 

    var p2 = command.CreateParameter(); 
    p2.Value = intRoleID; 
    command.Parameters.Add(p2); 

    var p3 = command.CreateParameter(); 
    p3.Value = intUserID; 
    command.Parameters.Add(p3); 

    cmd.Connection = con; 
    cmd.CommandText = strQry; 
    con.Open(); 
    intReturn = cmd.ExecuteNonQuery(); 
    con.Close(); 
} 
catch(Exception ex) 
{ 
    throw new Exception(ex.Message); 
} 
+0

为什么投票下来?可以给我原因吗? – 2013-02-18 05:39:39

+0

可能因为你给的答案是错误的。正确的答案是'password'是一个保留字。 – Corey 2013-02-18 06:07:24

+0

哦..我看...谢谢 – 2013-02-18 06:09:05