您的位置:程序门 -> .net技术 -> c#



access更新问题--等待


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


access更新问题--等待[已结贴,结贴人:mafgm]
发表于:2007-09-20 14:14:51 楼主
string   conn_main=   "provider=microsoft.jet.oledb.4.0;data   source=d:\\myproject2.0\\printexpress\\express.mdb;jet   oledb:database   password= ";
                        oledbparameter[]   pars   =   new   oledbparameter[2];
                        pars[0]   =   new   oledbparameter( "@id ",   oledbtype.integer);
                        pars[0].value   =   2;
                        pars[1]   =   new   oledbparameter( "@name ",   oledbtype.varchar);
                        pars[1].value   =   "test ";
                       
                        string   updatesql   =   "update   [companych]   set   "   +
                                                                "[name]=@name "   +    
                                                                "   where   id=@id ";
                        oledbconnection   conn   =   new   oledbconnection(conn_main);
                        conn.open();
                        oledbcommand   comm   =   new   oledbcommand();
                        comm.connection=conn;
                        comm.commandtext   =   updatesql;
                        foreach   (oledbparameter   par   in   pars)
                        {
                                comm.parameters.add(par);
                        }
                        int   i=comm.EXECutenonquery();---总是0
                        conn.close();
----
为什么i总是0,也没有错误!我数据库里有id为2的记录
发表于:2007-09-20 14:19:241楼 得分:0
oledb不支持命名参数。

简单点的,你可以拼sql串来执行。
发表于:2007-09-20 14:21:132楼 得分:30
ole   db   .net   提供程序使用标有问号   (?)   的定位参数,而不使用命名参数。

下面的示例创建一个   oledbparameter   并设置它的一些属性。
public   void   createoledbparameter()  
  {
        oledbparameter   parameter   =   new   oledbparameter( "description ",   oledbtype.varchar,   88);
        parameter.direction   =   parameterdirection.output;
  }

又如:

string   querystring   =   "select   *   from   table1   where   field1   like   ? ";
oledbcommand   command   =   new   oledbcommand(querystring,   connection);
command.parameters.add( "@p1 ",   oledbtype.char,   3).value   =   "a ";
oledbdatareader   reader   =   command.EXECutereader();
发表于:2007-09-20 14:24:213楼 得分:0
但是我的插入能执行阿,我同样使用的是命令参数
发表于:2007-09-20 14:37:504楼 得分:0
这种写的方式感觉不是很好,有点乱,以前我用的自动生成命令更新的方式(update()实现插入,删除和更新)
发表于:2007-09-20 16:24:295楼 得分:0
建议楼主,输出你的   comm.commandtext中的sql语句,如果语句正常,请到access中执行一下!
发表于:2007-09-20 16:35:006楼 得分:30
//access不支持命名参数,请按顺序添加参数
string   conn_main=   "provider=microsoft.jet.oledb.4.0;data   source=d:\\myproject2.0\\printexpress\\express.mdb;jet   oledb:database   password= ";
                        oledbparameter[]   pars   =   new   oledbparameter[2];
                        pars[0]   =   new   oledbparameter( "? ",   oledbtype.varchar);
                        pars[0].value   =   "test ";
                        pars[1]   =   new   oledbparameter( "? ",   oledbtype.integer);
                        pars[1].value   =   2;
                       
                        string   updatesql   =   "update   [companych]   set   [name]=?   where   id=? ";
                        oledbconnection   conn   =   new   oledbconnection(conn_main);
                        conn.open();
                        oledbcommand   comm   =   new   oledbcommand();
                        comm.connection=conn;
                        comm.commandtext   =   updatesql;
                        foreach   (oledbparameter   par   in   pars)
                        {
                                comm.parameters.add(par);
                        }
                        int   i=comm.EXECutenonquery();
                        conn.close();


快速检索

最新资讯
热门点击