可恶的Access,Update失败

我几乎没用过Access,一般都是用Sql Server。

这两天做一小网站,服务器上面没有Sql Server,只好用Access。遇到一个莫名其妙的问题,搞了半天才弄好。这是一个毫无技术含量的问题,纯粹是Access的一种错误规定,甚至是一个Bug。做程序时,要知道这个Bug,否则很难找出错误原因。

以下是我从遇到错误到改正错误的过程。

我在做一个部门数据访问层的类,添加删除查询都没有问题,就是更新不成功。下面贴出insert和update的方法,比较一下,其实代码几乎是一样的。

//插入新数据
public void insert(Department item)
{
//以下为生成的insert语句
string sql = @"insert into Department ( ID,Name,Alias) values (@ID,@Name,@Alias)";
DbCommand command
= db.GetSqlStringCommand(sql);
//为数据库命令添加参数
db.AddInParameter(command, "@ID", DbType.String, item.ID);
db.AddInParameter(command,
"@Name", DbType.String, item.Name);
db.AddInParameter(command,
"@Alias", DbType.String, item.Alias);
db.ExecuteNonQuery(command);
command.Dispose();
}

//更新数据
public void update(Department item)
{
//以下为生成的update语句
string sql = @"update Department set Name=@Name,Alias=@Alias where ID=@ID";
DbCommand command
= db.GetSqlStringCommand(sql);
//为数据库命令添加参数
db.AddInParameter(command, "@ID", DbType.String, item.ID);
db.AddInParameter(command,
"@Name", DbType.String, item.Name);
db.AddInParameter(command,
"@Alias", DbType.String, item.Alias);
db.ExecuteNonQuery(command);
command.Dispose();
}
上面这两段几乎相同的代码,insert能够正常工作,update却不能。update执行时,不出现任何错误提示,也没有异常,所有参数传递也正确,就是更新不到数据库,实在是莫名其妙!

后来从网上查资料,加上试验,才知道:Access参数传递是按照顺序传递的,而不是根据参数名称传递。实际上,在sql语句中,参数的名称是没有作用的,可以叫任意的名字,在定义sql语句时使用的参数名称与添加参数时的名称可以不相同。总之,参数名称在Access中没有任何用。

把上面代码中添加@ID参数的语句调整到第3位,使其与sql语句中出现的顺序一致,程序就能正常工作了。

版权所有:基础软件。作者邮箱:sun.j.l.studio@gmail.com。本文首发于 http://www.cnblogs.com/FoundationSoft。文章转载请保持此版权信息并注明出处。

posted @ 2011-01-20 23:04  基础软件  阅读(5281)  评论(1编辑  收藏  举报