2013-04-04 89 views
0

我一直在靠墙敲打我的头,并不断发现模糊的错误“UPDATE语句中的语法错误”。任何人都可以告诉我我的更新声明有什么问题吗?在Access数据库c中更新一个布尔型字段#

try 
{ 
    OleDbConnection ECon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\zoofari\zoofari\zoofari\bin\Debug\MainData.accdb"); 
    OleDbDataAdapter EdAdapt = new OleDbDataAdapter(); 
    EdAdapt.UpdateCommand = new OleDbCommand("UPDATE tbl_Results SET @Q1-Easy WHERE Username = '" +txtUname.Text+ "'", ECon); 
    EdAdapt.UpdateCommand.Parameters.Add("@Q1-Easy", OleDbType.Boolean).Value = true; 

    ECon.Open(); 
    EdAdapt.UpdateCommand.ExecuteNonQuery(); 
    ECon.Close(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

回答

2

要更新的字段名称在哪里? 的更新命令所需的语法是

UPDATE <tablename> SET <Field> = <value> WHERE <keyfield> = <value> 

您的查询,而不是有没有现场更新

EdAdapt.UpdateCommand = new OleDbCommand("UPDATE tbl_Results" + 
         " SET FIELDNAME= @Q1-Easy WHERE Username = '" +txtUname.Text+ "'", ECon); 
           ^^^^^^^^^^   

还要注意的是,你不应该使用字符串连接来构建SQL命令。
始终使用参数化查询。 (您已在此查询参数,为什么不使用一个又一个?)

眼看低于约字段名称您的评论你的代码可以通过这种方式来

string sqlText = "UPDATE tbl_Results SET [Q1-Easy] = ? WHERE Username = ?"; 
using(OleDbConnection ECon = new OleDbConnection(.....)) 
using(OleDbCommand cmd = new OleDbCommand(sqlText, ECon)) 
{ 
    ECon.Open(); 
    cmd.Parameters.Add("@Q1Value", OleDbType.Boolean).Value = true; 
    cmd.Parameters.Add("@uname", OleDbType.VarChar).Value = txtUname.Text; 
    cmd.ExecuteNonQuery(); 
} 

我已在使用加改变声明以确保连接已关闭并在完成时处理,并且我在方括号中使用了字段名称,因为我不确定-是否被接受为字段名称的有效字符。

还要注意在OleDb中的参数占位符可能是一个简单的?但将它们添加到文本中占位符的显示顺序相当重要。 OleDb不能通过名称识别参数占位符。

+0

您好Steve,Q1-Easy是字段名称,我试图将其值从false更改为true。这是否是错误的方式? – LHammy 2013-04-04 20:30:26

+0

对不起并不意味着发布这么快,这个更新表达是否正确? (更新tbl_Results“+”SET @ Q1-Easy = true其中用户名='“+ txtUname.Text +”'“,ECon); – LHammy 2013-04-04 20:38:45

+0

不,真正行不通。如果要将值直接放入字符串中(如果SqlServer需要1,则在Access中),则传递-1。正如我所说。总是使用参数化查询。看看[Sql注入问题在这里](http://stackoverflow.com/questions/332365/how-does-this-sql-injection-work) – Steve 2013-04-04 20:41:14

0

不知道@ Q1-EASY是一个字段名称或值,但你需要一个字段设置为东西:

UPDATE table SET field = value WHERE field = value; 

你已经得到了第一个“域=价值”部分错误。

相关问题