2016-05-08 90 views
2

我有一个由OleDb查询编辑的Access 2000(* .mdb)文件。查询问题(OleDb)

此刻,我想UPDATE表成只有两列的数据库,你可以在图片中看到下面

enter image description here

该数据库的每一列String

此代码,thows一个OleDbException

OleDbConnection con; 
OleDbCommand cmd; 

private void UpdateExistingRow() 
{ 
    string strProvider = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + path + ";" 
    string strSql = "UPDATE OPTIONS SET VAL='C:\\Edo\\Desktop\\Logo.png' WHERE IMP='LogoPath'"; 
    con = new OleDbConnection(strProvider); 
    cmd = new OleDbCommand(strSql, con); 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 
} 

这似乎很简单,我知道,但我无法找到解决方案。
谢谢。

+1

这怎么可能呢?这是一个错字,你会在第四行结束时错过**:'string strSql =“UPDATE OPTIONS SET VAL ='C:\\ Edo \\ Desktop \\ Logo.png'WHERE IMP =' LogoPath';' –

+0

对不起,我忘了把它放在这个问题! –

+0

@ PhamX.Bach我在想同样的事情。即使这个例外是缺少一个'实际的代码不会编译,如果缺少',所以也许它是一个'丢失'而不是 –

回答

2

答案并不像我们最初想象的那么明显,但我认为我发现它: IMP is a reserved keyword in Access SQL(或更可能:操作员)。奇怪的是it doesn't show up in the JET documentation

所以,你需要确保数据库引擎知道这是一个列名与[]逃避你的名字科拉姆:

UPDATE [OPTIONS] SET VAL='C:\\Edo\\Desktop\\Logo.png' WHERE [IMP] = 'LogoPath' 
+0

我真的不知道该如何谢谢你。 完美而详细的答案。 –