在执行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访问这方面没有做好??
1.微软官方比较权威,数据库引擎关键字Password赫然在列,链接是:http://office.microsoft.com/zh-cn/access-help/HA010030643.aspx#BMjetacereservedwords
2.看看你的DBhelper中的ExecuteCommand方法,添加参数是按顺序进行的,所以这两个顺序必须一致,这跟Access数据应该无关,即使是SQL SERVER,顺序不一致,应该也会不行。
谢谢,我从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: 你说的对,SQL SERVER是可以乱序的,另外两个必须一一对应。
1、password是关键字
2、传递参数的顺序要按照Sql语句中定义的顺序来。否则,系统不认可的。即使是用别的数据库也这样
不要截取一段啊,数据库库操作的这个也要:DBHelper.ExecuteCommand(OleDb, para);
发出来看啊!