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



简单的数据库问题,请教,谢谢


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


简单的数据库问题,请教,谢谢[已结贴,结贴人:cumtjsjxdc]
发表于:2007-02-20 11:35:24 楼主
public   static   readonly   string   connstring   =   @ "provider   =   microsoft.jet.oledb.4.0;data   source   =   data\storage.mdb "
public   static   readonly   string   changepassword   =   "update   users   set   userpassword=@usernewpassword   where   username=@username "

oledbconnection   conn   =   new   oledbconnection(connstring);
oledbcommand   cmd   =   new   oledbcommand(constants.changepassword,conn);
oledbparameter   paramusername   =   new   oledbparameter( "@username ",   username);
cmd.parameters.add(paramusername);
oledbparameter   paramusernewpassword   =   new   oledbparameter( "@usernewpassword ",   usernewpassword);
cmd.parameters.add(paramusernewpassword);
try
                                {
                                        conn.open();
                                      cmd.EXECutenonquery();                                
                                        conn.close();
                                        return   true;
                                       
                                }
                                catch   (oledbexception   ex)
                                {
                                        return   false;
                                }

请问   cmd.EXECutenonquery(),参数正确,怎么在数据库中无法更新,请各位大哥多多指教?小弟刚学c#不久
发表于:2007-02-20 11:40:081楼 得分:0
看看   ex   的错误信息。
   

发表于:2007-02-20 11:43:532楼 得分:0
谢谢!
ex   没有报错,cmd.EXECutenonquery()返回的结果不关怎么样总是0,就是在数据库中无法更新,而sql语句在数据库中运行是没有错误的啊~
发表于:2007-02-20 12:02:483楼 得分:0
加分请教!谢谢,等待中.....
发表于:2007-02-20 12:06:374楼 得分:0
关注一下
发表于:2007-02-20 12:19:445楼 得分:0
在数据库中没有找到与参数username一样的数据,username的类型string的话,oledbparameter   paramusername   =   new   oledbparameter( "@username ",   username.trim());试一试
发表于:2007-02-20 13:16:276楼 得分:0
up
发表于:2007-02-20 13:32:127楼 得分:0
加了,还是不行啊!   函数为:
public   bool   changepassword(string   username,   string   useroldpassword,   string   usernewpassword)
                {
                        if   (!login(username,   useroldpassword))
                        {
                                return   false;
                        }
                        else
                        {
                                oledbconnection   conn   =   new   oledbconnection(constants.connstring);
                                oledbcommand   cmd   =   new   oledbcommand(constants.changepassword,   conn);
                                oledbparameter   paramusername   =   new   oledbparameter( "@username ",   username);
                                cmd.parameters.add(paramusername);
                                oledbparameter   paramusernewpassword   =   new   oledbparameter( "@usernewpassword ",   usernewpassword);
                                cmd.parameters.add(paramusernewpassword);
                                try
                                {
                                        conn.open();
                                        cmd.EXECutenonquery();
                                        conn.close();
                                        return   true;

                                }
                                catch   (oledbexception   ex)
                                {
                                        return   false;
                                }
                                finally
                                {
                                        if   (conn.state   ==   connectionstate.open)
                                        {
                                                conn.close();
                                        }
                                }
                        }
                }

调用:bool   result   =   userdb.changepassword(globalinfo.username.trim(),   this.txtoldpassword.text.trim(),   this.txtnewpassword.text.trim());

请各位指点指点啦!谢谢!
发表于:2007-02-20 13:34:028楼 得分:0
加分!麻烦啦!
发表于:2007-02-20 13:44:549楼 得分:0
我也碰到相同的问题,最后我还是把所有更新的操作换成了sql语句,up下。
发表于:2007-02-20 15:06:5610楼 得分:0
access不是sqlserver,   sqlserver用具名参数   @paraname   格式,   access是用参数索引吧   ?index
格式
发表于:2007-02-20 15:54:1411楼 得分:0
问题尚未解决,等待ing...
发表于:2007-02-20 17:47:5512楼 得分:0
up
发表于:2007-02-20 18:59:2313楼 得分:0
cmd.EXECutenonquery()     上述方法是不是不能用于acess数据库的更新和插入啊,急等高手指点!!
发表于:2007-02-20 19:03:2914楼 得分:0
EXECutenonquery是可以用于access数据库的
代码上没看出什么问题
应该是你设计上的问题吧
另外,用access数据库的mdb文件要放在debug目录下,在项目目录下没行的,请检查一下
发表于:2007-02-20 19:18:4915楼 得分:0
谢谢!
我将数据库文件放到了项目文件夹了,连接没有问题,程序中能查询操作,但就是不能更新和插入,不知道问题出在哪?而sql语句在acess查询中没有问题,无奈!
请各位大哥继续指点迷津啊!
发表于:2007-02-20 19:28:2416楼 得分:0
有没有可能是access数据库权限的问题啊?
发表于:2007-02-20 19:51:1117楼 得分:0
你加我qq:110234     我和你说,   但是不能保证解决
发表于:2007-02-20 19:54:4918楼 得分:0
谢谢!
我将数据库文件放到了项目文件夹了,连接没有问题,程序中能查询操作,但就是不能更新和插入,不知道问题出在哪?而sql语句在acess查询中没有问题,无奈!
请各位大哥继续指点迷津啊!
===================================
我说的是要放在debug目录下,放在项目目录下是不行的,但你说能查询,可能不是这个问题,不过还是copy一个mdb文件到debug中试试
另外你可以中断一下
conn.open();
cmd.EXECutenonquery();
conn.close();
return   true;
一句一句看是不是有没执行的
然后再试试用sql语句看看
发表于:2007-02-20 20:31:0219楼 得分:0
这句出的问题:public   static   readonly   string   changepassword   =   "update   users   set   userpassword=@usernewpassword   where   username=@username "
改成
public   static   readonly   string   changepassword   =   "update   users   set   userpassword= '@usernewpassword '   where   username= '@username ' ";
试试
发表于:2007-02-20 21:12:3020楼 得分:0
谢谢   zoom3000s、laidon   以及dyjqk
按你们的方法做了,可能不是这方面的问题,还不行啊
进一步探索中......
发表于:2007-02-20 21:30:2421楼 得分:0
public   static   readonly   string   connstring   =   @ "provider   =   microsoft.jet.oledb.4.0;data   source   =   data\storage.mdb "
public   static   readonly   string   changepassword   =   "update   users   set   userpassword=?   where   username=? "

oledbconnection   conn   =   new   oledbconnection(connstring);
oledbcommand   cmd   =   new   oledbcommand(constants.changepassword,conn);
oledbparameter   paramusernewpassword   =   new   oledbparameter( "@usernewpassword ",   usernewpassword);
cmd.parameters.add(paramusernewpassword);
oledbparameter   paramusername   =   new   oledbparameter( "@username ",   username);
cmd.parameters.add(paramusername);
try
{
conn.open();
cmd.EXECutenonquery();
conn.close();
return   true;

}
catch   (oledbexception   ex)
{
return   false;
}

access不支持具名参数,注意parameters集合中参数的顺序
发表于:2007-02-20 21:58:1322楼 得分:10
参数顺序   ~
发表于:2007-02-20 23:09:1923楼 得分:0
谢谢!but:
public   static   readonly   string   userloginstring   =   "select   count(*)   from   users   where   username   =   @username   and   userpassword   =   @userpassword   ";

cmd.EXECutenonquery();   能进行查询,说明acess能用具名参数
对于参数顺序,我试了一下,还是没有解决啊!


发表于:2007-02-20 23:53:3324楼 得分:0
你看看access数据库文件是不是只读的!
发表于:2007-02-20 23:58:4125楼 得分:0
不是的
发表于:2007-02-21 00:20:4526楼 得分:10
给楼主整理一下,希望能够帮上忙:
1   检查数据库文件,是否为只读,若ntfs检查是否有权限问题
2   检查数据库结构,是否存在外键或主键约束问题。可将该语句直接放入access的查询中执行看是否正确。
3   逐行调试程序语句,看执行cmd.EXECutenonquery()后有没有exception内容

其他应该没有什么问题了。补充一下,楼主的代码写得很乱。。。
发表于:2007-02-21 04:28:4127楼 得分:0
谢谢!
都试了,还是不行啊!郁闷!看来我得换成sql   server数据库啦
发表于:2007-02-21 18:31:4028楼 得分:0
要是执行的查询语句  
EXECutenonquery()函数是不行的

该函数返回影响的行数
发表于:2007-02-21 21:15:1729楼 得分:10
///   <summary>
                ///   新建用户资料
                ///   </summary>
                ///   <param   name= "sacc "> </param>
                ///   <param   name= "spw "> </param>
                ///   <param   name= "snanme "> </param>
                ///   <param   name= "slv "> </param>
                ///   <returns> </returns>
                public   bool   saveuser(string   sacc,   string   spw,   string   snanme,   string   slv,string   dtime)
                {
                        string   sql   =   " ";
                        sql   =   "insert   into   [admin] "   +

                        "(user_name,user_acc,user_pw,user_lv,user_date) "   +
                        "   values( ' "   +
                                sacc   +   " ', ' "   +
                                spw   +   " ', ' "   +
                                snanme   +   " ', ' "   +
                                slv   +   " ',# "   +
                                dtime   +   "#) ";

                        try
                        {
                                this.EXECutesql(sql);
                        }
                        catch   (exception   e)
                        {
                                messagebox.show(e.message,   "错误 ",   messageboxbuttons.ok,   messageboxicon.error);
                                return   false;
                        }

                        return   true;
                }

                ///   <summary>
                ///   执行sql语句,返回影响的记录数
                ///   </summary>
                ///   <param   name= "sqlstring "> </param>
                ///   <returns> </returns>
                public   int   EXECutesql(string   sqlstring)
                {
                        using   (oledbconnection   connection   =   new   oledbconnection(connectionstring))
                        {
                                using   (oledbcommand   cmd   =   new   oledbcommand(sqlstring,   connection))
                                {
                                        try
                                        {
                                                connection.open();
                                                int   rows   =   cmd.EXECutenonquery();
                                                return   rows;
                                        }
                                        catch   (system.data.oledb.oledbexception   e)
                                        {
                                                throw   new   exception(e.message);
                                        }
                                }
                        }
                }

--------------->
调用:saveuser(textbox1.text,textbox2.text,textbox3.text,textbox4.text,textbox5.text);
发表于:2007-02-21 22:49:4830楼 得分:0
谢谢,我再看看
发表于:2007-02-21 22:56:2731楼 得分:70
up
发表于:2007-02-22 15:56:0532楼 得分:0
检查下sql语句中是否有access关键字
发表于:2007-02-23 17:13:2533楼 得分:0
我以前也遇到过相同的问题,就是parameters集合中参数的顺序。不知道你的现象是不是和我的一样了。
public   static   readonly   string   connstring   =   @ "provider   =   microsoft.jet.oledb.4.0;data   source   =   data\storage.mdb "
public   static   readonly   string   changepassword   =   "update   users   set   userpassword=@usernewpassword   where   username=@username "

oledbconnection   conn   =   new   oledbconnection(connstring);
oledbcommand   cmd   =   new   oledbcommand(constants.changepassword,conn);
oledbparameter   paramusernewpassword   =   new   oledbparameter( "@usernewpassword ",   usernewpassword);
cmd.parameters.add(paramusernewpassword);
oledbparameter   paramusername   =   new   oledbparameter( "@username ",   username);
cmd.parameters.add(paramusername);
try
                                {
                                        conn.open();
                                      cmd.EXECutenonquery();                                
                                        conn.close();
                                        return   true;
                                       
                                }
                                catch   (oledbexception   ex)
                                {
                                        return   false;
                                }
发表于:2007-02-24 13:46:4534楼 得分:0
点解唔得?
发表于:2007-02-24 13:51:2735楼 得分:0
好像把就是parameters集合中参数的顺序跳过来都不行哦.
public   static     string   connstring   =   @ "provider   =   microsoft.jet.oledb.4.0;data   source   =   data\storage.mdb ";
                public   static   string   changepassword   =   "update   users   set   userpassword= '@usernewpassword '   where   username= '@username ' ";
                 
   
                public   form1()
                {
                        initializecomponent();
                }

                private   void   button1_click(object   sender,   eventargs   e)
                {
                    oledbconnection   conn   =   new   oledbconnection(connstring);
                      oledbcommand   cmd   =   new   oledbcommand(changepassword,   conn);

oledbparameter   paramusernewpassword   =   new   oledbparameter( "@usernewpassword ",   usernewpassword);
                        cmd.parameters.add(paramusernewpassword);
                        oledbparameter   paramusername   =   new   oledbparameter( "@username ",   username);
                        cmd.parameters.add(paramusername);
                       
                        try
                        {
                                conn.open();
                                messagebox.show(cmd.EXECutenonquery().tostring());                              
                                conn.close();
                        }
                        catch   (oledbexception   ex)
                        {
                                messagebox.show(ex.tostring());
                        }
发表于:2007-02-24 17:32:2436楼 得分:0
使用oledbcommand连接access数据库的时候,sql语句中的参数不能直接写参数名字,如 "@username ",而应该将参数的名字改成 "? ",一律使用问号代表参数,并且在添加参数的时候,要注意sql语句中参数的顺序.
虽然你已经接帖了,我还是说一下这个问题.
发表于:2007-02-25 09:40:5137楼 得分:0
to:lilionline(一滴水的海),还是不行啊.
public   static     string   connstring   =   @ "provider   =   microsoft.jet.oledb.4.0;data   source   =   data\storage.mdb ";
                public   static   string   changepassword   =   "update   users   set   userpassword=?   where   username=? ";
               
                private   void   button1_click(object   sender,   eventargs   e)
                {
                        oledbconnection   conn   =   new   oledbconnection(connstring);
                        oledbcommand   cmd   =   new   oledbcommand(changepassword,   conn);
                        //下面参数中 "? "改成 "@usernewpassword "也不行..
                        oledbparameter   paramusernewpassword   =   new   oledbparameter( "? ",   usernewpassword);
                        cmd.parameters.add(paramusernewpassword);
                        oledbparameter   paramusername   =   new   oledbparameter( "? ",   username);
                        cmd.parameters.add(paramusername);
发表于:2007-03-01 14:19:3238楼 得分:0
to:gaoyingjun(高颖君)  
      你在command里的参数不要用"?",把oledbparameter   paramusernewpassword   =   new   oledbparameter( "? ",   usernewpassword);改成oledbparameter   paramusernewpassword   =   new   oledbparameter( "@userpassword ",   usernewpassword);

      sql语句,就按照你现在的,写成:update   users   set   userpassword=?   where   username=?
      同时,你还有一个重要的错误,你的oledbcommand的commandtype属性没有设置成storedprocedure,你要在执行EXECute方法前,加这样一句:
 cmd.commandtype = commandtype.storedprocedure;


快速检索

最新资讯
热门点击