ado access update 存储过程的问题

a183249556 2010-03-03 01:25:32
我用ado.net 操作access写了如下:
.........
string sqlstring="update [userInfo] set [userName]=@userName WHERE [userId]=@userId";
然后
OleDbCommand command=new .....

然后添加完command参数后
command.parameter.add(....
然后
command.ExecuteNonQuery()

然后竟然没更新的效果,程序是没有问题的

我想问的是:
ado.net 操作access的时候是不是不能像类似存储过程来做更新(UPDATE)?
如果可以,则怎么来处理!
如果不可以,则能告诉我为什么吗?
谢谢!
...全文
164 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjrcl 2011-04-14
  • 打赏
  • 举报
回复
除了Access之外,操作其它数据库可以不必要按照参数在SQL语句中出现的顺序添加进去一样可以正确执行,但是在 Access中一定按照插入的列的顺序添加参数,因为“OLE DB.NET Framework 数据提供程序使用标有问号 (?) 的定位参数,而不使用命名参数(MSDN)”,所以给添加参数和赋值一定要按照列的顺序。

正解!!!

被WebMatrix 0.6.812的Code Wizard害惨了...
a183249556 2010-03-03
  • 打赏
  • 举报
回复
还是周公能解我意呀!谢谢!
fina1982 2010-03-03
  • 打赏
  • 举报
回复
顶者有分 顶者有份
liuyu520hong 2010-03-03
  • 打赏
  • 举报
回复
string sql = "insert into S_Admin(UserName,Password,Remark,Mail,DepartId,Power)values(?,?,?,?,?,?)";
OleDbConnection connection = new OleDbConnection();
connection.ConnectionString = "";//此处设置链接字符串
//注意下面参数的顺序一定要按照sql语句中的插入的列的顺序赋值,否则一定会报异常
OleDbCommand command = new OleDbCommand(sql, connection);
command.Parameters.Add("?", OleDbType.LongVarWChar, 60).Value = userName;
command.Parameters.Add("?", OleDbType.LongVarWChar, 60).Value = password;
command.Parameters.Add("?", OleDbType.LongVarWChar, 60).Value = remark;
command.Parameters.Add("?", OleDbType.LongVarWChar, 60).Value = mail;
command.Parameters.Add("?", OleDbType.Integer, 4).Value = departId;
command.Parameters.Add("?", OleDbType.Integer, 4).Value = power;
connection.Open();
int rowsAffected = command.ExecuteNonQuery();
connection.Close();
command.Dispose();
return rowsAffected > 0;
正解!
周公 2010-03-03
  • 打赏
  • 举报
回复
在ADO.NET中使用参数化SQL语句的大同小异
在ADO.NET中经常需要跟各种数据库打交道,在不实用存储过程的情况下,使用参数化SQL语句一定程度上可以防止SQL注入,同时对一些较难赋值的字段(如在SQL Server中Image字段,在Oracle中Clob字段等)使用参数化SQL语句很容易就能赋值,所以本人经常在ADO.NET中使用参数化SQL 语句,近几年来陆续跟SQL Server/Oracle/ MySQL/Access打交道,积累了一些心得,现在整理出来供大家参考。

需要说明的是,除了Access之外,操作其它数据库可以不必要按照参数在SQL语句中出现的顺序添加进去一样可以正确执行,但是在 Access中一定按照插入的列的顺序添加参数,因为“OLE DB.NET Framework 数据提供程序使用标有问号 (?) 的定位参数,而不使用命名参数(MSDN)”,所以给添加参数和赋值一定要按照列的顺序。

通过上面的例子,基本上可以总结出一个规律:在参数化SQL中参数名的格式跟其在存储过程中生命存储过程参数一致,例如在Oracle中存储过程参数一律以”:”开头,在MS SQL Server中存储过程参数一律以”@”开头,而在MySQL中存储过程(MySQL从5.0以后版本支持存储过程)参数一律以“?”开头,所以在参数化SQL语句中参数名有些不一样(记得在csdn上有朋友提到过不知道为什么MySQL中参数化SQL语句中要用“?”而不是和SQL Server一样使用”@”),如果那位朋友看过本文,我想他就会解开这个疑虑了。
周公 2010-03-03
  • 打赏
  • 举报
回复
引用楼主 a183249556 的回复:
我用ado.net 操作access写了如下:
.........
string sqlstring="update [userInfo] set [userName]=@userName WHERE [userId]=@userId";
然后
OleDbCommand command=new .....

然后添加完command参数后
command.parameter.add(....
然后
command.ExecuteNonQuery()

然后竟然没更新的效果,程序是没有问题的

我想问的是:
ado.net 操作access的时候是不是不能像类似存储过程来做更新(UPDATE)?
如果可以,则怎么来处理!
如果不可以,则能告诉我为什么吗?
谢谢!

纠正两点:
1、你这不是"像类似存储过程来做更新",而是“参数化SQL语句”。
2、在Access中写参数化SQL语句和SQL Server不一样,不是以@开头,而是直接以?表示。
示例:

string sql = "insert into S_Admin(UserName,Password,Remark,Mail,DepartId,Power)values(?,?,?,?,?,?)";
OleDbConnection connection = new OleDbConnection();
connection.ConnectionString = "";//此处设置链接字符串
//注意下面参数的顺序一定要按照sql语句中的插入的列的顺序赋值,否则一定会报异常
OleDbCommand command = new OleDbCommand(sql, connection);
command.Parameters.Add("?", OleDbType.LongVarWChar, 60).Value = userName;
command.Parameters.Add("?", OleDbType.LongVarWChar, 60).Value = password;
command.Parameters.Add("?", OleDbType.LongVarWChar, 60).Value = remark;
command.Parameters.Add("?", OleDbType.LongVarWChar, 60).Value = mail;
command.Parameters.Add("?", OleDbType.Integer, 4).Value = departId;
command.Parameters.Add("?", OleDbType.Integer, 4).Value = power;
connection.Open();
int rowsAffected = command.ExecuteNonQuery();
connection.Close();
command.Dispose();
return rowsAffected > 0;
zhang_yugang 2010-03-03
  • 打赏
  • 举报
回复
拿到access数据库 把你这句话执行下 不就完了

如果数据库中能更新:可能有两个问题:

1:程序问题

2:数据库语句中有关键字存在
zhang_yugang 2010-03-03
  • 打赏
  • 举报
回复
不可以写成存储过程的形式
sxmonsy 2010-03-03
  • 打赏
  • 举报
回复
麻烦楼主多贴点呗....
PandaIT 2010-03-03
  • 打赏
  • 举报
回复
代码没贴全!!!!!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧