注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

共享圈

www.gxquan.com的同步博客,保存高质量文章之用

 
 
 

日志

 
 

OLEDB参数化  

2012-10-28 21:18:32|  分类: ASP.NET WEB |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

使用参数化 DbCommand 的一个缺点是需要参数的代码将仅适用于支持相同语法的提供程序。OLEDB、SqlClient 和 Oracle 提供程序全部使用不同的语法。例如,用于命名和指定参数的 SQL 语法使用 @ 符号,OLEDB 参数语法需要使用问号 (?) 作为参数占位符,而 Oracle 提供程序使用冒号 (:)。



string sqlstr = " select * from table where id=@id and name=@name ";

System.Data.SqlClient.SqlParameter parameters = newSystem.Data.SqlClient.SqlParameter[2];

parameters[0] = new SqlParameter("@id", uid);

parameters[1] = new SqlParameter("@name", name);



string sqlstr = " select * from table where id=? and name=? ";

System.Data.OleDb.OleDbParameter parameters = new System.Data.OleDb.OleDbParameter[2];

parameters[0] = new OleDbParameter("id", uid);

parameters[1] = new OleDbParameter("name", name);



string sqlstr = " select * from table where id=:id and name=:name ";

System.Data.OracleClient.OracleParameter parameters = new System.Data.OracleClient.OracleParameter[2];

parameters[0] = new OracleParameter(":id", uid);

parameters[1] = new OracleParameter(":name", name);



在通过OLEDB传递参数时候需要注意的问题


对于ACCESS数据库 可以是?cmd.CommandText = "insert into shop(ShopName,ShopAddress) Values(@sn,@sadd)";


但是对于SQL数据库 就是cmd.CommandText = "insert into shop(ShopName,ShopAddress) Values(?,?)";


而且在ACCESS中对于传递的参数的添加顺序 即使给出变量名 也必须和SQL语句调用的顺序一致 否则会出错


比如


?            cmd.CommandText = "insert into shop(ShopName,ShopAddress) Values(@sn,@sadd)";

cmd.Parameters.Clear();


p = new OleDbParameter();

p.ParameterName = "@sn"; p.OleDbType = OleDbType.Char; p.Value = sn;

cmd.Parameters.Add(p);


p = new OleDbParameter();

p.ParameterName = "@sadd"; p.OleDbType = OleDbType.Char; p.Value = sadd;

cmd.Parameters.Add(p);


因为语句中Values(@sn,@sadd)


@sn在@sadd之前 如果你在写参数的时候把?@sn?和@sadd的顺序写反 那么传递的参数也会反过来 即使你的?p.ParameterName定义准确了也一样

  评论这张
 
阅读(141)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017