关于OLEDB参数化查询[.net]

关于OLEDB参数化查询【.net】

分类:数据库C#2011-09-13 16:25549人阅读评论(0)收藏举报

.netparametersinsertstringtableaccess

使用参数化 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之前 如果你在写参数的时候把和@sadd的顺序写反 那么传递的参数也会反过来 即使你的?p.ParameterName定义准确了也一样

关于OLEDB参数化查询【.net】

分类:数据库C#2011-09-13 16:25549人阅读评论(0)收藏举报

.netparametersinsertstringtableaccess

使用参数化 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之前 如果你在写参数的时候把和@sadd的顺序写反 那么传递的参数也会反过来 即使你的?p.ParameterName定义准确了也一样


相关内容

  • 软件工程答辩题
  • 可能Q:本文所需的知识积累来源于课程还是实际应用? 或是Q:课题来源于工作实际需要还是其他方面? 参考A:(1)加入本人工作与老年教育的密切结合.(2)实际应用是知识积累的基础,课程会使平时积累的知识得到升华.特别对软件工程课程与实际项目实施管理平时的知识积累有很多的相互促进,尤其在本次系统实现阶段 ...

  • 学生学籍管理系统的设计与实现
  • 沈阳航空航天大学 课 程 设 计 报 告 课程设计名称:软件综合课程设计 课程设计题目:学生学籍管理系统的设计与实现 院(系): 计算机学院 专 业: 计算机科学与技术 班 级: 04010101 学 号: [1**********]15 姓 名: 指导教师: 丁一军 沈阳航空航天大学 课程设计任务 ...

  • 电子通讯录
  • 目录 1 技术要求.......................................................... 1 2 基本功能描述...................................................... 1 3 设计思路......... ...

  • 记一次渗透经过
  • 记一次渗透测试经过 首发IT168安全频道 转载请著明 [safe.it168.com] 作者:伤心的鱼 [IT168 专稿]前言: 笔者的一位朋友应聘到一家公司做网管,据说整个机房就他们俩人,工作很轻松.几乎是没什么事做,但是昨天突然给我打电话说是机房被入侵了,被人加了很多用户并且什么cain,a ...

  • ASP.NET的网站新闻管理系统设计与实现
  • 【摘要】利用asp.net和ado.net技术开发的网站新闻管理系统,实现了网站新闻的动态管理,使得对信息的管理更加及时、高效,提高了工作效率。同时对系统的开发原理、系统的功能特点和设计方案进行了介绍。【关键词】asp.net ado.net 新闻 管理 数据库随着internet的普及,越来越多的 ...

  • 网络编程技术
  • 试卷代号:7956 座位号 河南广播电视大学2008-2009学年度第一学期期末考试 高级网页制作技术 试题 2009年1月 一.判断题(在括号中填√或×,每小题2分,共20分) 1.ASP.NET页的默认扩展名是ascx.( ) 2.在.Net中,类System.Web.UI.Page 不可以被继 ...

  • 程序员面试题
  • 1.HTML控件和服务器控件有什么区别?区别在哪? HTML控件和服务器控件有什么区别?区别在哪? 服务器控件经过 服务器 如 下拉列表 国家的选了河北省 下一个就列出河北的市了 HTML控件.. 随便动 不经过服务器 只是在提交的时候得到它的值就可以了 1. new有几种用法  第 ...

  • 软件技术专业毕业设计论文
  • (此文档为word 格式,下载后您可任意编辑修改!) 马鞍山师范高等专科学校软件与 食品工程系软件技术专业毕业论文 题 目: 专业方向: 软件技术(c#.net web开发方向) 姓 名: 秦研 班 级:2010级软件技术(c#.net web开发方向) 指导教师: 王杰 二〇一二年十二月三十日 摘 ...

  • C#暑假作业答案
  • C#暑假作业 一.单项选择题 1.属于C#语言的关键字( ). A. abstract B. camel C. Salary D. Employ 答案:A 2.C#语言中,值类型包括:基本值类型.结构类型和( ). A.小数类型 B.整数类型 C.类类型 D.枚举类型 答案:D 3. 假定一个10行 ...