首页 新闻 会员 周边

C#中access数据库操作问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-01-05 08:56

在执行UPDATE和INSERT语句时,需要传入参数,例如这个dal层的操作:

 1 public static void ModifyUserList(UserList userList)
2 {
3 string OleDb ="UPDATE "+"UserList "+"SET "+
4 "[UserName]=@UserName, "+
5 "[Password]=@Password "+
6 " WHERE [ID]=@ID";
7 try
8 {
9 OleDbParameter[] para = new OleDbParameter[]
10 {
11
12 new OleDbParameter("@UserName",userList.UserName),
13 new OleDbParameter("@Password",userList.Password),
14 new OleDbParameter("@ID",userList.ID)
15
16 };
17 DBHelper.ExecuteCommand(OleDb, para);
18 }
19 catch (Exception e)
20 {
21 Console.WriteLine(e.Message);
22 throw e;
23 }
24 }

起初insert和update的语句都不成功,抛出异常说语法错误,后来在网上看了一些网友的提问和回答,程序中存在这两个错误:

1.字段名与ACCESS关键字冲突,需要在字段名前加方括号“[]”(导致程序抛出异常)

2.参数顺序不对,ACCESS要求参数组中参数的顺序和sql语句中参数出现的顺序一致(程序会正常执行,但是语句执行返回的影响行数却总是0)

 

我起初按1修改,程序不再抛出异常但是执行后数据库没有变化,然后我又按2调整了参数的顺序,顺利修改了数据库的值。

 

我的问题是:

1.我的表字段的三个名字是ID,Password,UserName,我查了ACCESS的保留字,这三个名字都不是关键字为什么还会抛出异常?

2.关于ACCESS要求参数组中参数的顺序和sql语句中参数出现的顺序一致这个问题,是ACCESS数据库的特殊限制,还是微软的.NET类库在ACCESS访问这方面没有做好??

Jessie.M的主页 Jessie.M | 初学一级 | 园豆:181
提问于:2011-12-31 16:23
< >
分享
最佳答案
0

1.微软官方比较权威,数据库引擎关键字Password赫然在列,链接是:http://office.microsoft.com/zh-cn/access-help/HA010030643.aspx#BMjetacereservedwords

2.看看你的DBhelper中的ExecuteCommand方法,添加参数是按顺序进行的,所以这两个顺序必须一致,这跟Access数据应该无关,即使是SQL SERVER,顺序不一致,应该也会不行。

收获园豆:8
NetSQL | 小虾三级 |园豆:1737 | 2011-12-31 17:13

谢谢,我从MSDN中怎么找这些关键字?搜了半天没找到,网上的又不准确;

关于问题2:我想这应该是原因:OLE DB .NET Framework 数据提供程序和 ODBC .NET Framework 数据提供程序不支持在向 SQL 语句或存储过程传递参数时使用命名参数(SQL SERVER是可以乱序的,因为支持命名参数),具体:“对 OleDbCommand 或 OdbcCommand 使用参数”(ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/wd_adonet/html/537d8a2c-d40b-4000-83eb-bc1fcc93f707.htm)

Jessie.M | 园豆:181 (初学一级) | 2012-01-04 10:36

@Jessie.M: 你说的对,SQL SERVER是可以乱序的,另外两个必须一一对应。

NetSQL | 园豆:1737 (小虾三级) | 2012-01-04 15:40
其他回答(2)
0

1、password是关键字

2、传递参数的顺序要按照Sql语句中定义的顺序来。否则,系统不认可的。即使是用别的数据库也这样

收获园豆:1
yanzhe | 园豆:213 (菜鸟二级) | 2011-12-31 17:31
0

不要截取一段啊,数据库库操作的这个也要:DBHelper.ExecuteCommand(OleDb, para);

发出来看啊!

收获园豆:1
小明冥 | 园豆:222 (菜鸟二级) | 2011-12-31 17:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册