当前位置:  开发笔记 > 编程语言 > 正文

UPDATE子句中的语法错误

如何解决《UPDATE子句中的语法错误》经验,为你挑选了1个好方法。

我正在尝试更新MS-Access数据库中的值.

直接输入到Access时查询工作正常,但是当我尝试在C#中更新它时,我得到"UPDATE子句中的语法错误"异常.

conMngr.ConnectionStr = ConfigurationManager.ConnectionStrings[_connectionStr].ConnectionString;
conMngr.OpenConnection();
try {

    string query = "select Id, counter from tabAppCounter where userId=" + _userId.ToString() + " and appPath = '" + path + "'";
    OleDbDataAdapter adapter = new OleDbDataAdapter(query, conMngr.DbCon);

    DataSet ds = new DataSet();
    adapter.Fill(ds);
    dataGridView.DataSource = ds.Tables[0];

    if (ds.Tables[0].Rows.Count != 0) {
        int count = int.Parse(ds.Tables[0].Rows[0].ItemArray[1].ToString())+ 1;
        string query2 = "UPDATE tabAppCounter set counter=@count where Id=@Id";

        conMngr.OleDbcmd = new OleDbCommand(query2, conMngr.DbCon);
        conMngr.OleDbcmd.Parameters.AddWithValue("@Id", ds.Tables[0].Rows[0].ItemArray[0].ToString());
        conMngr.OleDbcmd.Parameters.AddWithValue("@count", count.ToString());
        conMngr.OleDbcmd.ExecuteNonQuery();
    }        
} catch (Exception e) {
    MessageBox.Show(e.Message + "\n\n" + e.StackTrace);

}
conMngr.CloseConnection();

在ExecuteNonQuery之后,此代码失败,并在UPDATE子句异常中出现语法错误.

我已经尝试使用预建的查询字符串,但这也不起作用.



1> Igor..:

访问驱动程序(和Ole)不使用命名参数,它们是基于位置的.传递参数的顺序和更新语句中的参数不匹配,这会给您一个错误.

你真的应该?在更新字符串中使用占位符.

string query2 = "UPDATE tabAppCounter set counter=? where Id=?";

conMngr.OleDbcmd = new OleDbCommand(query2, conMngr.DbCon);
conMngr.OleDbcmd.Parameters.AddWithValue("@count", count.ToString());
conMngr.OleDbcmd.Parameters.AddWithValue("@Id", ds.Tables[0].Rows[0].ItemArray[0].ToString());
conMngr.OleDbcmd.ExecuteNonQuery();

最后确保类型正确,传入的类型必须与数据库中的类型匹配.因此,如果count两个地方都是一个int,那么传递count而不是count.ToString()

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有