.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 ...
随机推荐
- CCNA实验(10) -- Access List
使用包过滤技术在路由器上读取三层及四层报头的信息如源地址.目的地址.源端口.目的端口根据预先定义好的规则对包进行过滤 三种类型:1.标准ACL:表号范围1-99或1300-1999.仅对源IP地址进行 ...
- java 循环制作三角形
package hello; public class Sanjiao { public static void main(String[]args){ for(int i=1;i<5;i++) ...
- RabbitMQ(2)
上一次安装了RabbitMQ并成功创建了vhost和user,可是生产和消费的过程还没有完毕.这次主要调了一下这个过程. 上次基本的问题是没有实现过程代码的编写保存,事实上也就是Python程序,这两 ...
- QVector 和vector的比较
QVector和vector的比较: Qvector默认使用隐式共享,可以用setSharable改变其隐式共享.使用non-const操作和函数将引起深拷贝.at()比operator[](),快, ...
- 漫谈程序猿系列:她发现了一个Bug……
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...
- retina屏实现border边框1px
.border { position: relative; width: 300px; height: 200px; } .border:after { border: 1px solid #ff33 ...
- 图片变灰css3
-webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filte ...
- POJ 1840 Brainman(逆序对数)
题目链接:http://poj.org/problem?id=1804 题意:给定一个序列a[],每次只允许交换相邻两个数,最少要交换多少次才能把它变成非递降序列. 思路:题目就是要求逆序对数,我们知 ...
- php内核--SAPI概述
- ssma for oracle
SQL Server Migration Assistant (SSMA) for Oracle lets you quickly convert Oracle database schemas to ...