.NET参数化Oracle查询参数
- 最近在做数据库移植工作(SqlServer 2008 -> Oracle 11g),遇到一些不兼容的问题,以下是一个参数化方面的区别,资料来自其他网友,在此整理了一下。
- public static String ConnectionString = "Data Source=orcl;User ID=hr;Password=hr;";
- public static int Update(MacInfo model)
- {
- StringBuilder strSql = new StringBuilder();
- strSql.Append("update MacInfo set ");
- strSql.Append("Mac_Address=:Mac_Address,");
- strSql.Append("Mac_Status=:Mac_Status");
- strSql.Append(" where MacInfo_ID=:MacInfo_ID");
- //strSql.Append("Mac_Address='"+model.Mac_Address+"',");//拼凑Update字符串是可以执行成功的
- //strSql.Append("Mac_Status="+model.Mac_Status);
- //strSql.Append(" where MacInfo_ID='"+model.MacInfo_ID+"'");
- //这里注意,strSql中的Update语句参数顺序为:Mac_Address、Mac_Status、MacInfo_ID,所以下面OracleParameter
- //也必须按这个顺序来声明、赋值
- OracleParameter[] parameters = {
- new OracleParameter(":Mac_Address", OracleDbType.Varchar2,17),
- new OracleParameter(":Mac_Status", OracleDbType.Int32,4),
- new OracleParameter(":MacInfo_ID", OracleDbType.Varchar2,17)};
- parameters[0].Value = model.Mac_Address;
- parameters[1].Value = model.Mac_Status.ToString();
- parameters[2].Value = model.MacInfo_ID;
- int result = ExecuteCommand(strSql.ToString(), CommandType.Text,parameters);
- return result;
- }
- public static int ExecuteCommand(string queryString, CommandType commandType, params OracleParameter[] param)
- {
- int flag = 0;
- using(OracleConnection con = new OracleConnection(ConnectionString))
- {
- OracleCommand command = new OracleCommand(queryString, con);
- command.CommandType = commandType;
- if(param != null)
- {
- for(int i = 0; i < param.Length; i++)
- {
- command.Parameters.Add(param[i]);
- }
- }
- try
- {
- command.Connection.Open();
- flag = command.ExecuteNonQuery();
- }
- catch(Exception ex)
- {
- throw ex;
- }
- finally
- {
- command.Connection.Close();
- command.Dispose();
- command = null;
- }
- }
- return flag;
- }
- 总结一下:
使
用参数化 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定义准确了也一样
.NET参数化Oracle查询参数的更多相关文章
- oracle查询所有初始化参数(含隐含参数)
年龄大了,感觉记性不是很好了,还是重新做笔记了.最近在整理些稿子,顺便在记录下oracle查询所有初始化参数(含隐含参数): SELECT i.ksppinm name, i.ksppdesc des ...
- 45 个非常有用的 Oracle 查询语句
这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 Oracle 开发者都必备的技能,所以快 ...
- Solr学习总结(四)Solr查询参数
今天还是不会涉及到.Net和数据库操作,主要还是总结Solr 的查询参数,还是那句话,只有先明白了solr的基础内容和查询语法,后续学习solr 的C#和数据库操作,都是水到渠成的事.这里先列出sol ...
- Linux 下 Oracle 内核参数优化
数据库的性能优化涉及到整个数据库运行环境的方方面面,诸如操作系统,Oracle自身,存储,网络等等几个大块.而操作系统则是Oracle稳定运行与最大化性能的基石.本文主要描述基于Linux系统下 Or ...
- 【转】Solr客户端查询参数总结
今天还是不会涉及到.Net和数据库操作,主要还是总结Solr 的查询参数,还是那句话,只有先明白了solr的基础内容和查询语法,后续学习solr 的C#和数据库操作,都是水到渠成的事.这里先列出sol ...
- 40多个非常有用的Oracle 查询语句
给大家介绍是40多个非常有用的Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有Oracle 开发者都必备的技能,所以快快收藏吧! 日期 ...
- 45个非常有用的 Oracle 查询语句小结
45个非常有用的 Oracle 查询语句小结 这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 ...
- 45 个非常有用的 Oracle 查询语句(转)
这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 Oracle 开发者都必备的技能,所以快快收 ...
- Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数
Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数 关于处理小数点位数的几个oracle函数()1. 取四舍五入的几位小数select round(1.2345, 3) fr ...
随机推荐
- 微信开放框架-UCToo
UCToo是一套简单,易用,开源的微信增值应用开发框架,帮助用户快捷的实现微信公众平台的个性化定制功能. http://www.uctoo.com/
- GridView行编辑、更新、取消、删除事件使用方法
注意:当启用编辑button时,点击编辑button后会使一整行都切换成文本框.为了是一行中的一部分是文本框,须要把以整行的全部列都转换成模板,然后删掉编辑模板中的代码.这样就能使你想编辑的列转换成文 ...
- 简单的web三层架构系统【第一版】
SQLhelper助手类编写: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using Sys ...
- ASP.NET WebApi 简单记录
//获取当前提交过来的Request对象 var request = System.Web.HttpContext.Current.Request;
- Core Data Stack学习笔记
Entity Entities 实体->数据表一个实体可以表示一个数据模型 1> 通过图形化界面可以建立一个模型关系图,可以指定一对多,多对一,多对多的数据关系 -在数据库开发中,少用多对 ...
- BZOJ 1649: [Usaco2006 Dec]Cow Roller Coaster( dp )
有点类似背包 , 就是那样子搞... --------------------------------------------------------------------------------- ...
- java list基本用法
List<E>([]内的内容可省略),与数组类似: 实例化:List[<数据类型>] list = new ArrayList[<数据类型>](); 获得集合内元素 ...
- 理解Ajax
1.优化原则 优化的目的是希望降低程序的整体开销.虽然在程序中有许多因素可以优化,但是通常人们会认为这个开销就是程序的执行时间.其实我们更应该把重点放在对程序整体开销最大的那部分. 2.一切都是权 ...
- C语言实现约瑟夫环讨论
[问题描述] 约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针 ...
- Myeclipse安装Activiti
1.将压缩包内activiti文件夹放入Myeclipse\dropins文件夹内并修改activiti文件夹内Link文件指向自己的目录重启Myeclipse(这时打开bpmn文件仍会报错).2.将 ...