access的sql里不能用@XXX来命名参数,只能用?.
传递参数也不认名字,只认传递的顺序。这就意味着,即使在sqlserer中是一个参数,如果要在sql语句中出现两次,你也要传两道。

解决方案 »

  1.   

    sqlclient  的参数用 @ ,oledb 参数用问号,oracleclient用冒号,不知道我说对了没
      

  2.   


    大神,求讲解下,我这里是什么问题???就2个参数,顺序肯定没错吧?为什么还是不更新呢

    我开始怀疑自己的表达能力
    大神我觉得我不是参数顺序的问题,或者冒号,问号还是@号的问题,因为其他几句的编译是通过的....
    将代码中的no去掉后也能编译通过,如下代码是可以通过的
                        string sqlStr = @"update APPRecord set R_Sate=@Choice";
                        SqlMth.isInsert(sqlStr, new OleDbParameter("@Choice", Choice)原文的No在access中是自增长长整型,而我参数中用过int,用过string各种了就是不更新!
      

  3.   

    不知道你的 SqlMth.update 具体是什么东西。建议你先不要用什么 SQLHelper,使用ADO.NET原本很简单,就直接写出来就好了。
      

  4.   

    “不更新,也不要报错”,这你应该重点看看你的 where 条件是什么值,到底有几条记录符合这个条件?
      

  5.   

    感谢大神百忙之中指点.....
    这是一个前几天自己写的软件,一开始用的是sqlserver2012,没什么问题,但是后来由于需要,所以改成access数据库版本的.所以产生了这个问题...至于SqlMth.update ,主要是返回一个datatable,用来和dategridview搭配,部分代码如下(由于我对oledb不太熟,所以是自己百度后更具ado的方式写的..不过应该是对的,其他几个界面都通过了,唯独这个窗体一直不成功()
    DataTable dt = new DataTable();
                OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                da.Fill(dt);
                return dt;
    对于代码,我试过以下几个版本的,都不行!!!!!
    直接用17作为数字传参,不更新
    string sqlStr = "update APPRecord set R_Sate=@Choice where NO=@NO  ";
                        SqlMth.update(sqlStr,new OleDbParameter("@Choice", Choice)
                            , new OleDbParameter("@NO",17)
                            );
    把17加引号,作为字符串,不更新
    string sqlStr = "update APPRecord set R_Sate=@Choice where NO=@NO  ";
                        SqlMth.update(sqlStr,new OleDbParameter("@Choice", Choice)
                            , new OleDbParameter("@NO","17")
                            );
    去掉where条件和参数,更新成功了!
    string sqlStr = "update APPRecord set R_Sate=@Choice";
                        SqlMth.update(sqlStr,new OleDbParameter("@Choice", Choice));我确定access中有个no为17记录,同时No是自增长字段,长整型.