由于最近一个小项目,用户指定要Access,所以没发,只得Access了。显然采用OleDb那连接。在今天的开发过程中,遇见了一个问题:

 问题:      

         dal层的数据sql采用参数化形式,在Access数据库查询界面执行时候,没有错误,执行正常。但是在程序执行,就会出现程序不报任何错误,但是Update不成功,受影响的行数为0.    

       在我网上查询了许久,http://blog.sina.com.cn/s/blog_4668898b010008io.html OLEDB传递参数给Access要注意的问题)

解决: 

    其实问题病因在于:你的sql里面参数顺序和在oledb参数添加的顺序不一致。ok。我原来的code  注意:UserIdentity的出现位置。

我原来的code:

 注意:UserIdentity的出现位置。

  1. 代码   
  2.  
  3.     string sql = @"update UserInfo set   
  4. [RoleID] = @RoleID,  
  5. [UserName] = @UserName,  
  6. [PWD] = @PWD,  
  7. [Email] = @Email  
  8. where [UserIdentity] = @UserIdentity ";  
  9.  
  10.             DbCommand cmd = dbHelper.GetSqlStringCommond(sql  
  11.                 );  
  12.             dbHelper.AddParameterCollection(cmd,  
  13.                 new OleDbParameter("UserIdentity"user.UserIdentity),//注意UserIdentity放置位置  
  14.                 new OleDbParameter("RoleID"user.RoleID),  
  15.                 new OleDbParameter("UserName"user.UserName),  
  16.                 new OleDbParameter("PWD"user.PWD),  
  17.                 new OleDbParameter("Email"user.Email)  
  18.                    
  19.                 ); 

修改后的Code(运行成功):

 

  1. 代码   
  2. string sql = @"update UserInfo set   
  3. [RoleID] = @RoleID,  
  4. [UserName] = @UserName,  
  5. [PWD] = @PWD,  
  6. [Email] = @Email  
  7. where [UserIdentity] = @UserIdentity ";  
  8.  
  9.             DbCommand cmd = dbHelper.GetSqlStringCommond(sql  
  10.                 );  
  11.             dbHelper.AddParameterCollection(cmd,  
  12.                   
  13.                 new OleDbParameter("RoleID"user.RoleID),  
  14.                 new OleDbParameter("UserName"user.UserName),  
  15.                 new OleDbParameter("PWD"user.PWD),  
  16.                 new OleDbParameter("Email"user.Email),  
  17.                 new OleDbParameter("UserIdentity"user.UserIdentity)//注意UserIdentity放置位置  
  18.                    
  19.                 );